SQL 从查询结果里查询[通俗易懂]

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 使用方法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108241.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • MVC三层架构(详解)「建议收藏」

    MVC三层架构(详解)「建议收藏」1:初始MVC(1):三层架构三层架构是指:视图层View、服务层Service,与持久层Dao。它们分别完成不同的功能。View层:用于接收用户提交请求的代码在这里编写。Service层:系统的业务逻辑主要在这里完成。Dao层:直接操作数据库的代码在这里编写。为了更好的降低各层间的耦合度,在三层架构程序设计中,采用面向抽象编程。即上层对下层的调用,是通过接口实现的。而下层对上层的真正服务提供者,是下层接口的实现类。服务标准(接口)是相同的,服务提供者(实现类)可以更换。这就

  • IDEA热部署设置

    IDEA热部署设置转载位置:https://blog.csdn.net/nihao12323432/article/details/82664601

  • 学习BoundsChecker

    对C++程序不熟悉,但是因为工作需要,要对一些程序进行测试分析,找出是否有内存泄露情况。在网上找到了大家比较推崇的BoundsChecker,安装后开始看软件自带的手册,为了让更多的同事一起学习,要将全英文的手册翻译成中文,在这个学习过程中,也把成果不断贴出来大家分享吧!今天先贴手册的目录                                                Boun

  • 盘点那些最常用的Linux命令,都应该记熟!

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达   来源:cnblogs.com/chenliangchaoshuai/p/11827383.html l…

  • platform device和driver之间的关系

    platform device和driver之间的关系[c-sharp] viewplaincopy内核中的platform driver机制需要将设备本身的资源注册进内核,由内核统一管理,在驱动程序中使用这些资源时通过platform device提供的标准接口进行申请并使用。这样可以提高驱动和资源管理的独立性。本文的目的就是希望弄清楚platform device和driver之间的关系。  1.1

  • 基于简单sql语句的sql解析原理及在大数据中的应用「建议收藏」

    基于简单sql语句的sql解析原理及在大数据中的应用

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号