我对同一个数据库表有两个单独的查询,我使用 UNION 在同一结果集中返回了这些查询。我陷入困境的是,我现在也想对结果运行 GROUP BY,但没有成功。目前,每个 UNION 中都按“name_of_asset”进行分组(这很好!),但最终结果中每个“name_of_asset”我得到两行 - 每个内部选择各一行。因此,虽然查询的其余部分没问题,但下面的最后一个 GROUP BY 并没有完成我想要做的事情。事实上,我认为它对我的数据没有任何影响,我只是将其包含在下面以突出显示我已经尝试过的内容。
请注意,我正在尝试不使用临时表来完成以下任务。
SELECT TOP 4 asset, name_of_asset, usd_today, usd_prev
FROM
(
SELECT 'Asset' asset, name_of_asset, SUM(usd)/1000 usd_today, 0 usd_prev
FROM my_db..my_table
WHERE the_date = '9/30/2014'
AND asset = 'A'
UNION ALL
SELECT 'Asset' asset, name_of_asset, 0 usd_today, SUM(usd)/1000 usd_prev
FROM my_db..my_table
WHERE the_date = '8/29/2014'
AND asset = 'A'
) x
GROUP BY x.name_of_asset
ORDER BY x.usd_notional DESC
*此外,在您发表评论之前,请注意,在这篇文章中,我更改了所有数据库、表和列名称,所以我实际上并没有使用数据库“my_db”中名为“my_table”的表...给我有些归功于我的命名约定技巧稍微比这更好;p
预先感谢您的帮助!这是我第一个发布的问题...随时欢迎编辑和建设性批评:)
最佳答案
不要在 union 语句中进行分组。像这样:
SELECT TOP 4 asset, name_of_asset, SUM(usd_today)/1000 usd_today,SUM(usd_prev)/1000 usd_prev
FROM
(
SELECT 'Asset' asset, name_of_asset, usd usd_today, 0 usd_prev
FROM my_db..my_table
WHERE the_date = '9/30/2014'
AND asset = 'A'
UNION ALL
SELECT 'Asset' asset, name_of_asset, 0 usd_today, usd usd_prev
FROM my_db..my_table
WHERE the_date = '8/29/2014'
AND asset = 'A'
) x
GROUP BY (x.name_of_asset)
注意,因为您使用的是 sum,所以可以毫无问题地将其移出。 AVG 会是一个问题,但您没有使用该 agragate。
关于sql - 如何在 Sybase sql 子查询的结果上正确使用 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27624267/