我有以下声明。结果回来但记录没有排序。我究竟做错了什么?订购此声明
SELECT *
FROM (
SELECT name, date, SUM(volume) AS sumVolume, SUM(value) AS sumValue
FROM table
WHERE id = 12
) AS TempTable
ORDER BY date DESC
我有以下声明。结果回来但记录没有排序。我究竟做错了什么?订购此声明
SELECT *
FROM (
SELECT name, date, SUM(volume) AS sumVolume, SUM(value) AS sumValue
FROM table
WHERE id = 12
) AS TempTable
ORDER BY date DESC
此查询不会按照您的预期工作。在派生表中使用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
我认为,这是你在找什么:
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
这会给你数量和价值的每一天的总和,再下订单一天为你的结果。
在许多情况下,没有'group by'的先前版本不能正确地给出日期总和。
在外部select语句中使用ORDER BY TempTable.date
可以说明您希望以日期顺序呈现的内容是内部查询的结果。
我应该澄清。我只想要返回1行,其中包含人的最近名称以及所有音量和所有值之和的总和。 – 2010-11-28 14:10:20
我只想要1行回来....最近的名字和价值和总和的音量 – 2010-11-28 14:14:01