Подсчет разных групп в одном запросе - PullRequest
1 голос
/ 19 марта 2019

Представьте, что у меня есть такая таблица:

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

B связан с A в отношении 1: n.Например, таблицу можно было бы создать с помощью объединения.

Я хочу получить общее количество и число различных 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 Ответ

1 голос
/ 19 марта 2019

Вы ищете это?

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