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