gpt4 book ai didi

SQL 服务器 : How can I use the COUNT clause without GROUPing?

转载 作者:行者123 更新时间:2023-12-05 08:17:40 24 4
gpt4 key购买 nike

在给定一组约束的情况下,我希望从查询中得到两件事:

  • 第一场比赛
  • 总匹配数

我可以通过以下方式获得第一场比赛:

SELECT TOP 1
ID,
ReportYear,
Name,
SignDate,
...
FROM Table
WHERE
...
ORDER BY ... //I can put in here which one I want to take

然后我可以得到匹配计数,如果我使用

SELECT
MIN(ID),
MIN(ReportYear),
MIN(Name),
MIN(SignDate),
... ,
COUNT(*) as MatchCount
FROM Table
WHERE
...
GROUP BY
??? // I don't really want any grouping

我真的想避免对所有结果进行分组和使用聚合函数。这个问题SQL Server Select COUNT without using aggregate function or group by建议答案是

SELECT TOP 1
ID,
ReportYear,
Name,
SignDate,
... ,
@@ROWCOUNT as MatchCount
FROM Table

这在没有 TOP 1 的情况下有效,但是当它在其中时,@@ROWCOUNT = 返回的行数,即 1。我如何才能从本质上获得 COUNT(*) 的输出(where 子句之后剩下的任何内容)而不任何分组或需要聚合所有列?

我不想做的是将其中的每一个重复两次,一次用于第一行,然后再次用于 @@ROWCOUNT。我没有找到可以正确使用 GROUP BY 的方法,因为我严格想要符合我的条件的项目数量,并且我想要如果我对它们进行 GROUPed 就会丢弃这个数字的列 - 除非我误解了 GROUP BY。

最佳答案

假设您使用的是新版本的 SQL Server(2008+ 从内存中),那么您可以使用分析函数。

稍微简化一下,它们是一种对一组数据而不是一组数据进行聚合的方法 - 对基本聚合的扩展。

取而代之的是:

SELECT
... ,
COUNT(*) as MatchCount
FROM Table
WHERE
...

你这样做:

SELECT
... ,
COUNT(*) as MatchCount OVER (PARTITION BY <group fields> ORDER BY <order fields> )
FROM Table
WHERE
...
GROUP BY

如果不实际运行一些代码,我无法准确地记忆起您不能以这种方式使用哪些聚合。不过计数没问题。

关于SQL 服务器 : How can I use the COUNT clause without GROUPing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10444333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com