51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2228|回复: 5
打印 上一主题 下一主题

SQL 从查询结果里查询

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-4-12 16:30:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有orders表:


我想要从从表中查出每天电动车和手机各自的销售总额。这个需求还是蛮简单的,只需要根据createtime和pro
duct 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
1
查询结果如下:


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

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

  1. SELECT origintable.cr,
  2. SUM(CASE WHEN origintable.product = "电动车" THEN origintable.total ELSE 0 END) "电动车",
  3. SUM(CASE WHEN origintable.product = "手机" THEN origintable.total ELSE 0 END) "手机"
  4. FROM (SELECT DATE_FORMAT( createtime, "%Y-%m-%d" ) AS cr, product, SUM(price) AS total
  5. FROM orders GROUP BY DATE_FORMAT(createtime, "%Y-%m-%d"), product) AS origintable
  6. GROUP BY origintable.cr
复制代码


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

  1. create table orders(
  2. id int PRIMARY KEY auto_increment,
  3. product VARCHAR(64) null,
  4. price DOUBLE null,
  5. createtime DATETIME
  6. )

  7. INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("电动车", 50, NOW());
  8. INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("手机", 60, NOW());
  9. INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("电动车", 50, NOW());
  10. INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("手机", 60, NOW());
  11. INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("电动车", 50, "2016-04-14 22:16:11");
  12. INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("手机", 60, "2016-04-14 22:16:11");
  13. INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("电动车", 50, "2016-04-14 22:16:11");
  14. INSERT INTO orders (orders.product, orders.price, orders.createtime) VALUES ("手机", 60, "2016-04-14 22:16:11");
复制代码

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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

3#
发表于 2018-5-3 19:59:26 | 只看该作者
select create_time,sum(if(product ='电动车',price,0))as '电动车当日销售额',sum(if(product ='手机',price,0))as '当日手机销售额'from table group by create_time
回复 支持 反对

使用道具 举报

  • TA的每日心情
    擦汗
    2021-12-24 15:21
  • 签到天数: 93 天

    连续签到: 1 天

    [LV.6]测试旅长

    5#
    发表于 2018-6-7 11:16:53 | 只看该作者
    select createtime,sum(if(product ='电动车',price,0))as '电动车当日销售额',sum(if(product ='手机',price,0))as '当日手机销售额'from orders group by createtime;
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-20 08:42 , Processed in 0.072048 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表