小编典典

用于查找 count > 1 的记录的 SQL 查询

all

我有一张名为PAYMENT. 在这张表中,我有一个用户
ID、一个帐号、一个邮政编码和一个日期。我想查找所有使用相同帐号每天进行一次以上付款的用户的所有记录。

更新: 此外,应该有一个过滤器,而不是只计算邮政编码不同的记录。

这是表格的样子:

| user_id | account_no | zip   |      date |
|       1 |        123 | 55555 | 12-DEC-09 | 
|       1 |        123 | 66666 | 12-DEC-09 |
|       1 |        123 | 55555 | 13-DEC-09 |
|       2 |        456 | 77777 | 14-DEC-09 |
|       2 |        456 | 77777 | 14-DEC-09 |
|       2 |        789 | 77777 | 14-DEC-09 |
|       2 |        789 | 77777 | 14-DEC-09 |

结果应该类似于:

| user_id | count |
|       1 |     2 |

您将如何在 SQL 查询中表达这一点?我在考虑自我加入,但由于某种原因,我的计数是错误的。


阅读 68

收藏
2022-06-20

共1个答案

小编典典

使用HAVING子句和 GROUP By 使行唯一的字段

下面会发现

每天使用相同帐号支付超过一笔款项的所有用户

SELECT 
 user_id ,
 COUNT(*) count
FROM 
 PAYMENT
GROUP BY
 account,
 user_id ,
 date
HAVING
COUNT(*) > 1

更新 如果您只想包含那些具有不同 ZIP 的内容,您可以先获得不同的集合,然后执行 HAVING/GROUP BY

 SELECT 
    user_id,
    account_no , 
    date,
        COUNT(*)
 FROM
    (SELECT DISTINCT
            user_id,
            account_no , 
            zip, 
            date
         FROM
            payment

        ) 
        payment
 GROUP BY

    user_id,
    account_no ,

    date
HAVING COUNT(*) > 1
2022-06-20