SQL 从查询结果里查询

有orders表:
订单表

我想要从从表中查出每天电动车和手机各自的销售总额。这个需求还是蛮简单的,只需要根据createtime和product group by就行了。下面是我写的SQL语句:

SELECT DATE_FORMAT( createtime, "%Y-%m-%d" ) cr, product, SUM(price) total FROM orders GROUP BY DATE_FORMAT(createtime, "%Y-%m-%d"), product

查询结果如下:
这里写图片描述

这个结果确实满足了我的需求,但是存在一个问题,就是当天数多了的时候,会看得我头晕眼花的。如果查询结果是下面这个样子,我想看起来会舒服得多:
这里写图片描述

对于如何直接从表中查询出这样的结果,我是一点想法都没有,但是,我却知道如何从上一个SQL语句的查询结果中查询从而得到想要的结果,下面是我写的SQL语句:

SELECT origintable.cr, 
SUM(CASE WHEN origintable.product = "电动车" THEN origintable.total ELSE 0 END) "电动车", 
SUM(CASE WHEN origintable.product = "手机" THEN origintable.total ELSE 0 END) "手机" 
FROM (SELECT DATE_FORMAT( createtime, "%Y-%m-%d" ) AS cr, product, SUM(price) AS total 
FROM orders GROUP BY DATE_FORMAT(createtime, "%Y-%m-%d"), product) AS origintable 
GROUP BY origintable.cr

如果大家想亲自试一试,可以用下面的SQL语句创建orders表和向表中插入数据:

create table orders(
id int PRIMARY KEY auto_increment,
product VARCHAR(64) null,
price DOUBLE null,
createtime DATETIME
)
INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("电动车", 50, NOW());
INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("手机", 60, NOW());
INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("电动车", 50, NOW());
INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("手机", 60, NOW());
INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("电动车", 50, "2016-04-14 22:16:11");
INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("手机", 60, "2016-04-14 22:16:11");
INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("电动车", 50, "2016-04-14 22:16:11");
INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("手机", 60, "2016-04-14 22:16:11");

如果大家有其它方式实现本文的需求,欢迎留言。

提示
本文所有SQL语句均根据MySQL数据库编写。

推荐
SQL基础知识学习可以去w3school:
SQL 教程

case when then else end 学习可以看下面这篇博文:
sql case when then else end 用法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值