@NewSantaClaus

Как получить данные двух колонок и посчитать количество?

Добрый день, уважаемые коллеги

На первый взгляд есть простая задача, но как решить оптимальным способом не могу придумать. Буду рад за любую помощь

Задача состоит в том чтобы получить все уникальные строки из двух колонок, и посчитать сколько раз всего попадалось каждое из значений в любой из этих же колонок + ограничение по дате

Запрос который у меня вышел
SELECT 
	t.str,
	(SELECT COUNT(*) FROM tableName WHERE date BETWEEN '2021-01-01' AND '2021-12-31' AND str1 = t.str OR str2 = t.str) as count
FROM (
	(SELECT DISTINCT str1 as str FROM tableName WHERE date BETWEEN '2021-01-01' AND '2021-12-31')
	UNION
	(SELECT DISTINCT str2 as str FROM tableName WHERE date BETWEEN '2021-01-01' AND '2021-12-31')
) as t


Запрос работает, но производительность хочется подтянуть. Сейчас запрос обрабатывает около 700к за 15 сек. Как можно оптимизировать и улучшить производительность этого запроса? Индексы стоят

Спасибо
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
@galaxy
SELECT 
  t.str,
  SUM(n)
FROM (
  (SELECT str1 as str, COUNT(*) as n FROM tableName WHERE date BETWEEN '2021-01-01' AND '2021-12-31' GROUP BY str1)
  UNION
  (SELECT str2 as str, COUNT(*) as n FROM tableName WHERE date BETWEEN '2021-01-01' AND '2021-12-31' GROUP BY str2)
) as t
 GROUP BY t.str
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы