在不同条件下多次从同一列中选择数据

时间:2018-03-10 20:02:38

标签: mysql sql phpmyadmin

我有一张桌子,用于存储3个不同楼层的总耗电量。每天添加3个新行,每个楼层有一个记录。

--------------------------------------------------
--FloorNumber--TotalDailyConsumption--DateStamp---
--------------------------------------------------
--     1     --        1200         --2018-03-10--
--     2     --        1650         --2018-03-10--
--     3     --        1900         --2018-03-10--
--     1     --        1400         --2018-03-09--
--     2     --        1150         --2018-03-09--
--     3     --        1270         --2018-03-09--
--------------------------------------------------

我正在尝试创建一个查询,以便在过去7天内重新调整每个楼层的每日总消耗量。数据将自动插入数据库中。

----------------------------------------
--DateStamp---Floor1--Floor2--Floor3----
----------------------------------------
--2018-03-10-- 1200 -- 1650 --  1900  --
--2018-03-09-- 1400 -- 1150 --  1270  --
----------------------------------------

我目前有以下查询,我知道只返回楼层1的值,但是我无法弄清楚如何扩展它以包括其他两层楼。

SELECT DateStamp, TotalDailyConsumption AS Floor1 FROM floor WHERE
FloorNumber = 1 AND DateStamp >= DATE_ADD(CURDATE(), INTERVAL -7 day)
ORDER BY DateStamp DESC

2 个答案:

答案 0 :(得分:2)

您想要group by和条件聚合:

SELECT DateStamp,
       SUM(CASE WHEN FloorNumber = 1 THEN TotalDailyConsumption END) AS Floor1,
       SUM(CASE WHEN FloorNumber = 2 THEN TotalDailyConsumption END) AS Floor2,
       SUM(CASE WHEN FloorNumber = 3 THEN TotalDailyConsumption END) AS Floor3
FROM floor f
WHERE DateStamp >= DATE_ADD(CURDATE(), INTERVAL -7 day)
GROUP BY DateStamp
ORDER BY DateStamp DESC;

答案 1 :(得分:0)

尽管戈登的答案符合您的需求,但如果您想要显示每周的消费量:

SELECT FloorNumber, 
SUM(TotalDailyConsumption) as WeeklyConsumption 
FROM test
WHERE DateStamp >= DATE_ADD(CURDATE(), INTERVAL -7 day) 
GROUP BY FloorNumber 
ORDER BY FloorNumber ASC;