sql - 如何在 Sybase sql 子查询的结果上正确使用 GROUP BY

标签 sql sybase

我对同一个数据库表有两个单独的查询,我使用 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/

相关文章:

sql - 在 SQL 连接的情况下如何将 SQL 转换为关系代数?

java - 如何从tomcat的context.xml中传递加密相关属性以用于java中的jdbc连接?

c# - 帮助使用 .NET 从 XML 批量/批量插入到 Sybase

sql - 在调试 SQL 查询时需要帮助

mysql - 查询左连接还是数据插入?

mysql - 在 HANA DB 之上转换 MySQL 模式?

php - SQL Server PDO UPDATE 循环错误

SQL - 排序后,仅返回列中具有某些连续值的行

java - 在 EJB 上下文中从 DataSource 调用过程时出现 "Stored procedure ' xxx ' may be run only in unchained transaction mode."错误

character-encoding - Sybase ASE : show the character encoding used by the database