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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java工厂模式三种详解(部分转载)

    java工厂模式三种详解(部分转载)工厂方法模式(FactoryMethod)工厂方法模式分为三种:1、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:举例如下:(我们举一个发送邮件和短信的例子)首先,创建二者的共同接口:[java]viewplaincopypublicinterfaceSender{ publicvoidSe…

    2022年7月20日
    15
  • 汉化日记_sorceress alive汉化

    汉化日记_sorceress alive汉化使用方法:下载后解压,替换你安装OpenLiveWriter位置:C:\Users\Administrator\AppData\Local\OpenLiveWriter的app目录下的OpenLiveWriter.Localization.dll即可变成中文链接:https://pan.baidu.com/s/1Ja0-DcRihiEHtvsU1u5j2w?pwd=u7f8提取码:u7f8…

    2022年10月20日
    4
  • cefsharp 执行js_怎么防止js注入

    cefsharp 执行js_怎么防止js注入我试图注入的JavaScript文档的页面后,加载磁头:CefSharpJavaScript注入varbrowserSettings=newBrowserSettings();browserSettings.FileAccessFromFileUrlsAllowed=true;browserSettings.UniversalAccessFromFileUrlsAllowed=t…

    2025年12月3日
    3
  • 浅谈时间轮算法[通俗易懂]

    浅谈时间轮算法[通俗易懂]时间轮在计算机世界中,只有待解决的问题变得大规模后,算法的价值才能够最大化的体现。时间轮算法可以将插入和删除操作的时间复杂度都降为O(1),在大规模问题下还能够达到非常好的运行效果。如果我们要实现一个定时任务该如何实现呢?最简单的方式就是使用一个任务队列来完成定时任务。具体实现细节下面详细展开。

    2022年9月27日
    3
  • 查看 CUDA cudnn 版本 & 测试 cuda 和 cudnn 有效性「建议收藏」

    查看 CUDA cudnn 版本 & 测试 cuda 和 cudnn 有效性「建议收藏」https://medium.com/@changrongko/nv-how-to-check-cuda-and-cudnn-version-e05aa21daf6ccuda版本cat/usr/local/cuda/version.txtcudnn版本cat/usr/local/cuda/include/cudnn.h|grepCUDNN_MAJOR-A2

    2022年4月26日
    66
  • 服务器磁盘配置信息,服务器磁盘阵列配置

    服务器磁盘配置信息,服务器磁盘阵列配置说到磁盘阵列(RAID,RedundantArrayofIndependentDisks),现在几乎成了网管员所必须掌握的一门技术之一,特别是中小型企业,因为磁盘阵列应用非常广泛,它是当前数据备份的主要方案之一。然而,许多网管员只是在各种媒体上看到相关的理论知识介绍,却并没有看到一些实际的磁盘阵列配置方法,所以仍只是一知半解,到自己真正配置时,却无从下手。本文要以一个具体的磁盘阵列配置方法…

    2022年6月6日
    54

发表回复

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

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