我有以下声明。结果回来但记录没有排序。我做错了什么?
SELECT *
FROM (
SELECT name, date, SUM(volume) AS sumVolume, SUM(value) AS sumValue
FROM table
WHERE id = 12
) AS TempTable
ORDER BY date DESC
答案 0 :(得分:0)
我相信这就是你要找的东西:
SELECT *
FROM (
SELECT name, date, SUM(volume) AS sumVolume, SUM(value) AS sumValue
FROM table
WHERE id = 12
GROUP BY date
) AS TempTable
ORDER BY TempTable.date DESC
这将为您提供每天的音量和价值总和,然后按天为您排序结果。
没有“分组依据”的先前版本在许多情况下都没有正确地按日期汇总。
在外部选择语句中使用ORDER BY TempTable.date
说明了您希望在日期顺序中显示的内容是内部查询的结果。
答案 1 :(得分:0)
此查询无法按预期运行。在派生表中使用SUM
(这是一个AGGREGATE函数)会给你提前一行 - 除非你开始GROUP BY
另一列。
在您的示例中,即使您按id
分组,您仍然只会获得一行(因为您按一个ID分组)。更改WHERE
语句以包含更多ID,并将它们分组到派生表中。
另外,请查看各种聚合函数的MySQL manual,了解它们的作用。
此致
修改强>
由于OP的要求有些明显,我会尽力帮助他解决问题:
SELECT x.name, x.date, y.vol, y.val
FROM table AS x,
( SELECT MAX(date) AS date, SUM(volume) AS vol, SUM(value) AS val
FROM table
WHERE id = 12 ) AS y
WHERE x.id = 12,
AND x.date = y.date