SQL: сгруппировать строки по колонке при условии, что значение с другой колонке разные, и посчитать, сколько будет таких колонок
Всем привет.
Есть такая таблица:
CREATE TABLE matchings (
company_name VARCHAR(),
match_confidence_score VARCHAR(),
match_id_group VARCHAR(),
source VARCHAR(),
duns VARCHAR()
);
В этой таблице есть такие данные:
INSERT INTO matchings VALUES
('A', 0.99875, '96104', 'Source 1', '123'),
('A', 0.99875, '96104', 'Source 2', '123);
Мне нужно посчитать, сколько строк есть в этой таблице по таким условиям: чтобы match_id_group был одинаковый, duns был одинаковый, но source обязательно разный.
В данном случае он должен показать, что есть 1 совпадение (нашел 2 строки и это 1 совпадение).
Если бы данные были такие:
INSERT INTO matchings VALUES
('A', 0.99875, '96104', 'Source 1', '123'),
('A', 0.99875, '96104', 'Source 1', '123);
То он бы должен был показать 0 (ну то есть ни одного совпадения по условиям).
А если бы данные были такими:
INSERT INTO matchings VALUES
('A', 0.99875, '96104', 'Source 1', '123'),
('A', 0.99875, '96104', 'Source 2', '123),
('B', 0.96875, '96103', 'Source 1', '122'),
('B', 0.96875, '96103', 'Source 2', '122);
То он бы сказал, что нашел 2 совпадения условиям.
А если бы данные были такими:
INSERT INTO matchings VALUES
('A', 0.99875, '96104', 'Source 1', '123'),
('A', 0.99875, '96104', 'Source 2', '123),
('B', 0.96875, '96103', 'Source 1', '122'),
('B', 0.96875, '96103', 'Source 2', '122),
('C', 0.49875, '96105', 'Source 1', '121'),
('C', 0.49875, '96105', 'Source 1', '121);
То он бы сказал, что нашел 2 совпадения (потому что C не удовлетворяет условиями для совпадения).
Никак не могу придумать запрос.
Источник: Stack Overflow на русском