Получить различное количество всех столбцов в одном запросе MySQL - PullRequest
1 голос
/ 07 мая 2020

Я пытаюсь получить различное количество всех столбцов в одном запросе. Рассмотрим приведенную ниже таблицу.

COL1 | COL2 | COL3
A    | 5    | C
B    | 5    | C
C    | 5    | C
C    | 5    | C
D    | 7    | C

Ожидаемый результат

DC_COL1 | DC_COL2 | DC_COL3     #DC - Distinct count
4       | 2       | 1

Хотя вышеуказанный результат не может быть достигнут (AFAIK) в одном запросе (одно полное сканирование таблицы) с использованием допустимой группы по функции, какие оптимизации можно здесь сделать?

Выполнение индивидуальных запросов для каждого столбца может привести к полному сканированию таблицы для каждого столбца. Хотя вся таблица могла попасть в пул буферов во время запроса отдельного счетчика для первого столбца, это все равно будет проблемой для больших таблиц.

1 Ответ

1 голос
/ 07 мая 2020

Это можно сделать за одно сканирование таблицы:

SELECT 
  COUNT(DISTINCT COL1) DC_COL1,
  COUNT(DISTINCT COL2) DC_COL2,
  COUNT(DISTINCT COL3) DC_COL3
FROM tablename
...