在多个列上使用group by的单个列的计数

cyej8jka  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(324)

我有两列帐户号码和客户id。一个客户可以有多个帐户,但一个帐户不能有多个客户。
我已经将一个包含account\ num及其对应的customer\ id的文件通过 LOAD DATA INFILE 命令。现在我试图通过查询验证在一个文件中多次出现的任何帐户是否在两个不同的行中具有相同的customer\u id或不同的customer\u id。
要求:我想返回那些帐户已经来了多次,但有不同的客户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;

希望我明白。

p8ekf7hl

p8ekf7hl1#

你可以用 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 s。

42fyovps

42fyovps2#

您只需使用 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
c0vxltue

c0vxltue3#

将客户支票放入一个join查询中,如下所示

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)

相关问题