@newPsevdonim

Можно ли посчитать количество пар с помощью sql запроса?

Есть бд куда постоянно записываются логи, мне нужно посчитать количество пар. Я написал для этого скрипт на python, но можно ли как-нибудь это сделать с помощью sql запроса?
Пример:
столбец 1    столбец2   результат
фф               123            2 
фф               123            2
фф               456            1
йцу              123            1
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
Результат больше похож на количество дублирующихся записей, а не на количество пар, потому что по количеству пар результат будет такой:

столбец1  столбец2  результат
фф           123            1
фф           456            0
йцу          123            0


так как все же не понятно что вам необходимо, вот несколько вариантов:

-- количество дублирующихся записей
SELECT столбец1, столбец2, count(*)
  FROM таблица
  GROUP BY столбец1, столбец2;

-- количество ПАР!!
SELECT столбец1, столбец2, count(*) div 2
  FROM таблица
  GROUP BY столбец1, столбец2;

-- если необходимо именно как в вопросе (количество дублирующихся записей):
SELECT t1.столбец1, t1.столбец2, cnt AS результат
  FROM таблица t1
  JOIN (
  SELECT столбец1, столбец2, count(*) cnt
  FROM таблица
  GROUP BY столбец1, столбец2) t2 ON t2.столбец1 = t1.столбец1
                                 AND t2.столбец2 = t1.столбец2
;

-- если необходимо именно как в вопросе (КОЛИЧЕСТВО ПАР!!):
SELECT t1.столбец1, t1.столбец2, cnt div 2 AS результат
  FROM таблица t1
  JOIN (
  SELECT столбец1, столбец2, count(*) cnt
  FROM таблица
  GROUP BY столбец1, столбец2) t2 ON t2.столбец1 = t1.столбец1
                                 AND t2.столбец2 = t1.столбец2
;


см. пример на dbfiddle

PS: т.к. вы не указали СУБД, пример написан для MySQL 8
для SQL Server div надо заменить на обычный оператор /
для Oracle count(*) div 2 надо заменить на CEIL(count(*) / 2)
и должно работать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
tsklab
@tsklab
Здесь отвечаю на вопросы.
ВЫБРАТЬ столбец1, столбец2, КОЛИЧЕСТВО(*)
  ИЗ Таблица
  ГРУППА ПО столбец1, столбец2
Ответ написан
Комментировать
iMedved2009
@iMedved2009
Не люблю людей
Select count(*) from (select field1 from table group by field1, field2 having count(*) = 2) as t;
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы