Есть ли способ найти строки с одинаковым столбцом в MySQL - PullRequest
1 голос
/ 03 мая 2019

У меня в MySQL есть таблица с именем accounttransactions, в которой хранятся финансовые транзакции.Теперь здесь есть две колонки, ref для справочных номеров и adm для номера приема студентов соответственно.Я хочу найти в этой таблице количество студентов с одинаковым номером транзакции, но разными студентами, учитывая, что один студент может использовать один и тот же номер транзакции более одного раза.IE

---------------
| adm  | ref  |
--------------
| 102  | 2145 |
| 102  | 2145 |
| 103  | 2152 |
| 104  | 2152 |
---------------

для поступления 102, ссылка в порядке.Я хочу найти строки, такие как пропуск 103 и 104.

Я пытался использовать

SELECT COUNT(ref) AS num, ref FROM accounttransactions GROUP BY ref HAVING num>1

, но это дает мне счет для рефери для всех студентов, даже тех, которые имеют одинаковый номер поступления.

Ответы [ 3 ]

2 голосов
/ 03 мая 2019

Использовать коррелированный подзапрос с exists

DEMO

select * from  accounttransactions a 
where exists 
   (select 1 from accounttransactions b where a.ref=b.ref having count(distinct adm)>1)

ВЫХОД:

adm ref
103 2152
104 2152
1 голос
/ 03 мая 2019

Я бы использовал exists, но не с агрегацией:

select a.*
from accounttransactions a 
where exists (select 1 
              from accounttransactions a2
              where a2.ref = a.ref and
                    a2.adm <> a.adm
             );

При индексе accounttransactions(ref, adm) это должно иметь лучшие характеристики производительности.

1 голос
/ 03 мая 2019

Я использовал self join, чтобы найти вывод

SELECT e.* 
FROM accounttransactions e 
INNER JOIN accounttransactions f ON e.ref = f.ref 
WHERE e.adm != f.adm 
GROUP BY e.ref, e.adm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...