我有一张名为PAYMENT. 在这张表中,我有一个用户 ID、一个帐号、一个邮政编码和一个日期。我想查找所有使用相同帐号每天进行一次以上付款的用户的所有记录。
PAYMENT
更新: 此外,应该有一个过滤器,而不是只计算邮政编码不同的记录。
这是表格的样子:
| 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 查询中表达这一点?我在考虑自我加入,但由于某种原因,我的计数是错误的。
使用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