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

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

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

(0)
上一篇 2022年3月6日 上午9:00
下一篇 2022年3月6日 上午10:00


相关推荐

  • Java内存管理-掌握虚拟机类加载机制(四)

    勿在流沙筑高台,出来混迟早要还的。做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!上一篇介绍了整个JVM运行时的区域,以及简单对比了JDK7和JDK8中JVM运行时区域的一些变化,也顺便总结了哪些区域会发生异常(内存溢出)问题。前一篇的话还是非常重要,请大家务必要多多阅读学习和掌握,因为这些基础的知识点会关联后续的一系列问题内容,如果前面没有先有一定的基础知识储…

    2022年2月28日
    43
  • 【转载】ASP和ASP.NET根本区别

    【转载】ASP和ASP.NET根本区别

    2021年11月21日
    42
  • 引入Bootstrap方法

    引入Bootstrap方法如果你是一名 web 前端开发工程师或者网页设计师 那么肯定对 Bootstrap 这个框架早有耳闻 甚至一些 web 后端工程师也会常常借助 Bootstrap 的力量来构筑自己心目中理想的 web 应用 而在去年年底推出的 Bootstrap3 更是追随了响应式布局 扁平化设计的 web 开发与设计潮流 让我们感受到了它所带来的无穷魅力 我们会通过接下来一系列的 Bootstrap 教程 让 Bootstrap 初学者们

    2026年3月26日
    2
  • Linux Shell循环结构

    Linux Shell循环结构fi}&donewaitecho“MissionCompleted.”*for循环语句实现文件中批量用户创建“`shell[root@hdp-1shell]#catusers_from_file.shIFS=$’\n’forlinein`cat$1`doif[${#line}-eq0];thencontinuefiuser=`echo”$line”|awk'{print$1}’`pass=`echo”$line”|a

    2022年7月24日
    13
  • Java取余和取模

    Java取余和取模抛开高级语言的实现,取余运算和取模运算本身并不完全一致,区别在于对负整数进行取商时操作不同。虽然这样说,但是取余运算和取模运算的公式都一样。对于x和y两个整数(int),通过以下两个操作获取余数或模数:step1、求商:intz=x/ystep2、求余数或模数:intresult=x-y*z它们的差别在于,如果z的值…

    2022年4月29日
    55
  • 怎么用python连接数据库_python连接pg数据库

    怎么用python连接数据库_python连接pg数据库实现步骤:一、使用mysql.connector1、导入msql的包2、创建连接对象3、使用cursor方法获取操作游标4、fetchall方法获取数据,for循环进行输出5、最后关闭连接对象importmysql.connector#创建连接对象#参数分别为:ip地址,用户名,密码,库名mydb=mysql.connector.connector(host=”192.168.139.128″,user=”root”,passwd=”root”,

    2025年8月8日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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