Sql 按查询选择由分组产生的组数
我尝试了以下查询,以选择通过逐组查询生成的组数:Sql 按查询选择由分组产生的组数,sql,sql-server,tsql,sql-server-2014,Sql,Sql Server,Tsql,Sql Server 2014,我尝试了以下查询,以选择通过逐组查询生成的组数: SELECT count(*) FROM ( SELECT count(*) FROM MyTable WHERE Col2 = 'x' GROUP BY Col1 ) 很遗憾,此查询无效:“')附近的语法不正确。 注意:我只想得到一行(我已经找到了一个结果为n倍的解决方案,其中n=组计数) 无需计算子查询中的行数,结果无论如何都是相同的 SELECT COUNT(*)
SELECT count(*)
FROM (
SELECT count(*)
FROM MyTable
WHERE Col2 = 'x'
GROUP BY Col1
)
很遗憾,此查询无效:“')附近的语法不正确。
注意:我只想得到一行(我已经找到了一个结果为n倍的解决方案,其中n=组计数)
无需计算子查询中的行数,结果无论如何都是相同的
SELECT COUNT(*)
FROM (
SELECT value = COUNT(*)
FROM MyTable
WHERE Col2 = 'x'
GROUP BY Col1
) е
但我认为-你需要尝试这个查询-
SELECT COUNT(DISTINCT Col1)
FROM MyTable
WHERE Col2 = 'x'
你必须为列和表命名
SELECT count(*) Total
FROM (
SELECT count(*) Groups
FROM MyTable
WHERE Col2 = 'x'
GROUP BY Col1
) a
只需在内部查询中为您的计数(*)提供一个别名,它就会起作用。请投票人详细说明,如果需要,我当然很乐意改进问题,谢谢。您是第一个,谢谢,这很有效。有什么问题吗?为什么为列定义别名如此重要?(请注意,无论我是否计算子查询中的行,别名都是重要的内容)。不知道为什么。您的查询符合ANSI SQL。好的,谢谢。我会尽快接受你的答案(还剩9分钟)。或者也可以看看下面Devart的答案。我正在寻找这个答案,希望不需要子问题,也不需要了解COUNT DISTINCT,从而消除分组的需要。不幸的是,这种方法只适用于过于简单的分组,这不是我在多个联接上使用过度聚合表达式的情况。我想知道如果不能消除GROUP BY,是否还有一种方法可以实现一级查询?
SELECT count(*) Total
FROM (
SELECT count(*) Groups
FROM MyTable
WHERE Col2 = 'x'
GROUP BY Col1
) a