sql - 在 SQL Server 中按 COUNT 子查询分组
问题描述
会喜欢关于如何满足我的需求的建议,如下所述 -
按子查询结果分组,这样一个场景的例子:我有一张表transactionLog
,每个事务可以处理多次。我有一个大型统计查询来按尝试计数分析内容,例如 - 按进程计数分组的总交易量。
为了实现上面的示例,我尝试构建的查询是:
SELECT
SUM(Amount),
(SELECT COUNT(*) FROM [db].[dbo].[transactionlog] t2 WHERE t2.OrderGuid = [db].[dbo].[transactionlog].OrderGuid) as 'ProccessCount'
FROM [db].[dbo].[transactionlog]
group by 'ProccessCount'
哪个抛出:
每个 GROUP BY 表达式必须至少包含一个不是外部引用的列。
显然我的现实生活场景更广泛,这个例子只是解释我想要实现的目标的一种方式。在现实生活中,我有多个查询,例如针对不同类型的统计信息使用不同的 where 子句,我将所有这些查询合并到一个结果集。似乎工会,一切正常,只是 group by 不起作用。
谢谢!
~~编辑 - 进一步解释我的具体情况~~ 可以说我没有一个名为 OrderGuid 的字段。
TransactionLog
是这样建造的——
TransactionLogId (primary key)
Amount
ExtraProcessOfTransactionLogId (default to 0)
每个原始交易的字段都ExtraProcessOfTransactionLogId
设置为 0。每次重新处理交易时,都会插入一个新交易,并将其ExtraProcessOfTransactionLogId
设置为TransactionLog
原始交易。
我想实现同样的目标 - 将按进程尝试计数分组的所有事务的数量相加。
样本数据 -
TransactionLogId:1, Amount:100, ExtraProcessOfTransactionLogId :0
TransactionLogId:2, Amount:100, ExtraProcessOfTransactionLogId :0
TransactionLogId:3, Amount:100, ExtraProcessOfTransactionLogId :1
我想要一个查询,结果是 -
ProcessAttempts : 1, TotalAmount : 100
ProcessAttempts : 2, TotalAmount : 200
非常感谢!
解决方案
如果我理解正确,您需要两个级别的聚合:
SELECT ProcessCount, SUM(Amount), COUNT(*)
FROM (SELECT SUM(Amount) as Amount, COUNT(*) as ProcessCount
FROM [db].[dbo].[transactionlog] tl
GROUP BY IIF(ExtraProcessOfTransactionLogId = 0, TransactionLogId, ExtraProcessOfTransactionLogId)
) og
GROUP BY ProcessCount
ORDER BY ProcessCount;
这首先聚合OrderGuid
以获取每个订单的计数和总和。它聚合以获取每个交易数量的订单数量(和数量)。
推荐阅读
- graph-theory - 这种使用弹簧和电荷的加权图形可视化有名称吗?
- reactjs - 在反应中制作关注和取消关注按钮(更改按钮)
- sql - SQL 查询以确定表的数量
- linux - 无法使用 mongoimport 导入远程 mongodb
- git - 将 SVN 存储库移动到 Git,其中不同的分支具有不同的外部,它们共享相同的外部本地目录名称
- ag-grid - 通过拖动和行分组根据行数据使 rowDrag 有条件
- neo4j - 如何从 CE 版本中删除 NEO4J
- javascript - 正则表达式匹配双引号内的每个字符串并包含转义引号
- android - ScrollView 内的指南 - 使用 Viewport %
- reactjs - 为什么在 Next.js 中使用 Link 时会重新加载页面?