количество отдельных столбцов с группировкой по нескольким столбцам - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть два столбца account_number и customer_id.Один клиент может иметь несколько учетных записей, но одна учетная запись не может иметь несколько клиентов.

Я выгрузил файл, содержащий account_num и соответствующий ему customer_id, в команду db через LOAD DATA INFILE.Теперь я пытаюсь проверить с помощью запроса, имеет ли какая-либо учетная запись, которая была зарегистрирована несколько раз в файле, одинаковый customer_id или разный customer_id в двух разных строках.

ТРЕБОВАНИЕ: я хочу вернуть те учетные записи, которые приходили несколько раз, но имели разные идентификаторы клиентов

Я пытался с группой по, но не получил желаемого результата.Это мой запрос, который не дает желаемого результата

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;

Надеюсь, я в порядке.

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Вы можете использовать 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 с.

0 голосов
/ 20 декабря 2018

Перетащите клиентский чек в запрос на присоединение, например, так:

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)
0 голосов
/ 20 декабря 2018

Вы можете просто получить количество уникальных идентификаторов клиентов, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...