1. 程式人生 > >SQL 從查詢結果裏查詢

SQL 從查詢結果裏查詢

create csdn www. ++ .text 我卻 number 問題 for

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

SQL 從查詢結果裏查詢