想象一下我有一个这样的表:
# | 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
在这两种情况下都是相同的。而且我想避免不必要地调用它。除此之外,如果查询发生更改,您还需要确保在其他位置进行更改,从而易于出错并创建(可能是不必要的)工作。
有没有办法更有效地做到这一点?
答案 0 :(得分:1)
您在寻找这个吗?
SELECT COUNT(*) AS total, COUNT(DISTINCT A) AS num_of_A
FROM (. . . ) q