在同一查询中计算不同的组

时间:2019-03-19 11:09:08

标签: sql sql-server select group-by count

想象一下我有一个这样的表:

#   |   A   |   B   |   MoreFieldsHere
1       1       1
2       1       3
3       1       5
4       2       6
5       2       7
6       3       9

B以1:n的关系与A关联。例如,可以使用联接创建表。

我想同时获得总数和不同A的数量。
我知道我可以使用这样的查询:

SELECT v1.cnt AS total, v2.cnt AS num_of_A
FROM
(
    SELECT COUNT(*) AS cnt
    FROM SomeComplicatedQuery
    WHERE 1=1
          -- AND SomeComplicatedCondition
) v1,
(
    SELECT COUNT(A) AS cnt
    FROM SomeComplicatedQuery
    WHERE 1=1
      -- AND SomeComplicatedCondition
    GROUP BY A
) v2

然而,SomeComplicatedQuery是一个复杂而缓慢的查询,而SomeComplicatedCondition在这两种情况下都是相同的。而且我想避免不必要地调用它。除此之外,如果查询发生更改,您还需要确保在其他位置进行更改,从而易于出错并创建(可能是不必要的)工作。

有没有办法更有效地做到这一点?

1 个答案:

答案 0 :(得分:1)

您在寻找这个吗?

SELECT COUNT(*) AS total, COUNT(DISTINCT A) AS num_of_A
FROM (. . . ) q