在我们的航空业中,我们需要在 AIR_USER 表中单次登录查找多个客户编号。表结构如下。
ROW_ID | 登录 | CUST_NUM | FULL_NAME |
---|---|---|---|
1-3EW | 苏尼尔 | 3001 | 苏尼尔·库马尔 |
1-3QL | 苏尼尔克 | 3002 | 苏尼尔·库马尔 |
1-4FV | DILIPK | 1001 | 迪利普·库马尔 |
1-5TF | DILIPK | 1003 | 迪利普·库马尔 |
1-4BX | 拉维普 | 2002 | 拉维·普拉迪普 |
我使用了下面的查询,但由于成本和基数达到数十万,因此花费了大量时间。此外,该表有近百万条记录,因为它包含所有用户信息。
SELECT
DISTINCT LOGIN, CUST_NUM, COUNT(CUST_NUM)
FROM AIR_USER
GROUP BY
LOGIN, CUST_NUM
HAVING COUNT(CUST_NUM) > 1
ORDER BY LOGIN;
如果此查询正确,您可以帮忙吗?如果正确,您能否协助完善查询。
查询以获取用户表中单个用户的多个客户号码
请勿在同一(子)查询中使用
DISTINCT
和 GROUP BY
。 GROUP BY
将返回每组一行,因此 DISTINCT
毫无意义。
您也不想将
CUST_NUM
包含在 GROUP BY
中:
SELECT LOGIN,
LISTAGG(CUST_NUM, ',') WITHIN GROUP (ORDER BY cust_num) AS cust_nums,
COUNT(CUST_NUM)
FROM AIR_USER
GROUP BY LOGIN
HAVING COUNT(CUST_NUM) > 1
ORDER BY LOGIN