Ger*_*mer 1 sql sql-server aggregate-functions
我的查询
SELECT TOP 1 *, COUNT(*) AS totalRun
FROM history
ORDER BY starttime DESC`
Run Code Online (Sandbox Code Playgroud)
估计结果是历史表中1行的所有数据,其中包含最新记录,以及包含记录总数starttime的字段totalrun,但是......我得到以下错误.
消息8120,级别16,状态1,行1
列"history.id"在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.
我究竟做错了什么?
EDIT
结果示例:
这些是行的所有字段,在历史记录表中具有最新的开始时间,并带有额外的COUNT字段'totalRun'
聚合只能用两种情况表示.
GROUP BY声明的地方OVER条款的地方以下内容将为您提供最近的开始时间和源表中共享该开始时间的行数...
SELECT
starttime,
COUNT(*) AS row_count
FROM
history
GROUP BY
starttime
ORDER BY
starttime DESC
Run Code Online (Sandbox Code Playgroud)
在这种结构中唯一可以选择的字段都在的那些GROUP BY语句(你可以有几个),或聚集*(如SUM(),COUNT()等).
但是,如果您希望在COUNT(*)整个表上完成,而不仅仅是组合在一起的行,则可以在OVER语句中使用该子句SELECT.
SELECT
*,
COUNT(*) OVER (PARTITION BY 1) AS row_count
FROM
history
ORDER BY
starttime DESC
Run Code Online (Sandbox Code Playgroud)
因为这不使用a GROUP BY,所以您也可以选择*而不仅仅是您正在分组的字段.
如果您需要不同的东西,请包含一些示例数据和您想要的结果吗?
| 归档时间: |
|
| 查看次数: |
3494 次 |
| 最近记录: |