У меня есть два столбца account_number и customer_id. Один клиент может иметь несколько учетных записей, но одна учетная запись не может иметь нескольких клиентов.
Я сбросил файл, содержащий account_num и соответствующий ему customer_id, в db с помощью команды LOAD DATA INFILE. Теперь я пытаюсь проверить с помощью запроса, имеет ли какая-либо учетная запись, которая несколько раз приходила в файл, один и тот же customer_id или другой customer_id в двух разных строках.
ТРЕБОВАНИЕ: я хочу вернуть те учетные записи, которые приходили несколько раз, но с разными идентификаторами клиентов
Я пробовал с group by, но не получил желаемого результата. Это мой запрос, который не дает желаемого результата
SELECT ACCOUNT_NUM,UNIQUE_CUSTOMER_ID,COUNT(UNIQUE_CUSTOMER_ID)
FROM LINKAGE_FILE
GROUP BY ACCOUNT_NUM, UNIQUE_CUSTOMER_ID
HAVING COUNT(ACCOUNT_NUM) > 1 AND COUNT(UNIQUE_CUSTOMER_ID) = 1;
Надеюсь, я ясен.
@ P.Salmon да может приходить несколько раз к одному и тому же клиенту, а также к другому клиенту






Вы можете просто получить количество уникальных идентификаторов клиентов, используя COUNT(DISTINCT..) для каждого account_num, и отфильтровать те случаи, когда количество больше 1, внутри предложения HAVING:
SELECT
ACCOUNT_NUM,
COUNT(DISTINCT CUSTOMER_ID) AS unique_customer_count
FROM LINKAGE_FILE
GROUP BY ACCOUNT_NUM
HAVING unique_customer_count > 1
Я хочу вернуть те учетные записи, которые приходили несколько раз, но с разными идентификаторами клиентов
Вы можете использовать EXISTS:
SELECT lf.*
FROM LINKAGE_FILE lf
WHERE EXISTS (SELECT 1 FROM LINKAGE_FILE lf1 WHERE lf1.ACCOUNT_NUM = lf.ACCOUNT_NUM AND lf1.UNIQUE_CUSTOMER_ID <> lf.UNIQUE_CUSTOMER_ID);
Однако вы также можете агрегировать с вашим запросом:
SELECT ACCOUNT_NUM, COUNT(DISTINCT UNIQUE_CUSTOMER_ID)
FROM LINKAGE_FILE
GROUP BY ACCOUNT_NUM
HAVING COUNT(DISTINCT UNIQUE_CUSTOMER_ID) > 1;
Таким образом, вы можете получить только ACCOUNT_NUM, у которых есть два или более CUSTOMER_ID.
Мне нужна только эта учетная запись, но этот запрос постоянно выполняется и не дает результатов.
Я хочу вернуть те учетные записи, которые приходили несколько раз, но с разными идентификаторами клиентов
первый запрос выполняется в фоновом режиме, но не дает вывода, тогда как второй работает нормально, но дает только количество учетных записей
@MuddassirRahman. . Это то, что он делает и для первого запроса, который вы должны индексировать (ACCOUNT_NUM и UNIQUE_CUSTOMER_ID).
да, это дает ACCOUNT_NUM, у которого больше 1 customer_id. но мне нужны те account_num, у которых также больше 1 customer_id, и эти customer_ids не совпадают
Перетащите проверку клиента в запрос на соединение, например
DROP TABLE if exists t;
create table t(accountid int,cid int);
insert into t values
(1,1),(1,2).(1,1),(2,3),(3,4),(3,4);
select distinct t.accountid,t.cid
from t
join
(
select accountid,count(distinct cid) cids
from t
group by accountid having cids > 1
) s on s.accountid = t.accountid;
+-----------+------+
| accountid | cid |
+-----------+------+
| 1 | 1 |
| 1 | 2 |
+-----------+------+
2 rows in set (0.00 sec)
Вы хотите сказать, что учетная запись может появляться у одного и того же клиента несколько раз?