SQL Подсчёт количества повторяющихся значений в двух столбцах
Мне нужно чтобы получилось суммарное количество повторяющихся записей в двух столбцах
select 'столбец1', 'столбец2', count(*)
from 'таблица'
group by 'столбец1', 'столбец2'
having count(*) > 1
Сама таблица на входе выглядит примерно так:
| Заголовок1 | Заголовок2 |
|---|---|
| [email protected] | [email protected] |
| [email protected] | [email protected] |
| [email protected] | [email protected] |
| [email protected] | |
| [email protected] |
На выходе выдаёт суммарное количество вместе с пустыми ячейками, либо вообще ничего не выдаёт. Может кто-нибудь подскажет что я не так делаю?
Ответы (1 шт):
Для решения данной задачи нужно использовать UNION ALL который в отличие от UNION сохраняет дубликаты значений при слиянии. (я иправил [email protected] на [email protected] видимо была опечатка)
CREATE TABLE Table1
(
Column1 VARCHAR(20),
Column2 VARCHAR(20)
);
INSERT INTO Table1 (Column1, Column2)
VALUES
('[email protected]', '[email protected]'),
('[email protected]', '[email protected]'),
('[email protected]', '[email protected]'),
('', '[email protected]'),
('', '[email protected]');
SELECT * FROM /* внешний запрос выборки дубликатов */
(SELECT Column1 /* внутренний запрос объединение Column2 и Column1 */
FROM Table1
UNION ALL
SELECT Column2
FROM Table1
) as T1 /* задаем алиас для объединенной таблицы */
GROUP BY T1.Column1 /* можно использовать и Column1 */
HAVING Count(Column1) > 1 AND Column1 != '' /* и фильтруем пустые значения*/
В данном случае я использовал фильтр Column1 != '' если значения могут быть NULL, то нужно делать соответствующее сравнение: Column1 != NULL
Результат:
| Column1 |
|-----------|
| [email protected] |
| [email protected] |
Cудя по последнему комментарию еще нужна сумма совпадений, для этого можно использовать во внешнем запросе:
SELECT *, count(Column1) FROM
| Column1 | count(Column1) |
|-----------|----------------|
| [email protected] | 2 |
| [email protected] | 2 |