SQL去重跟计数同时使用
时间: 2025-06-12 16:31:54 浏览: 12
### SQL 同时去重和计数的查询语法示例
在 SQL 中,同时实现去重和计数可以通过多种方式完成。以下是一些常见的方法:
#### 方法一:使用 `COUNT(DISTINCT column)` 进行去重和计数
`COUNT(DISTINCT column)` 是 SQL 中直接用于对某一列进行去重并计数的函数。它可以统计某一列中不同值的数量。
```sql
SELECT COUNT(DISTINCT user_id) AS unique_user_count
FROM kx_st_user_earning
WHERE statistics_type = 3;
```
此查询将返回 `user_id` 列中唯一值的数量[^1]。
#### 方法二:结合 `GROUP BY` 和 `HAVING` 实现更复杂的去重与计数
如果需要对某些分组条件下的数据进行去重和计数,可以结合 `GROUP BY` 和 `HAVING` 子句。例如,统计每个 `user_id` 下的记录数量,并筛选出记录数大于 1 的用户。
```sql
SELECT user_id, COUNT(*) AS record_count
FROM kx_st_user_earning
WHERE statistics_type = 3
GROUP BY user_id
HAVING COUNT(*) > 1;
```
此查询将返回每个 `user_id` 的记录数量,并仅显示那些记录数大于 1 的用户。
#### 方法三:使用子查询实现更灵活的去重与计数
对于更复杂的需求,可以使用子查询来实现去重和计数。例如,先通过子查询对某列进行去重,然后再对外层结果进行计数。
```sql
SELECT COUNT(*) AS unique_record_count
FROM (
SELECT DISTINCT user_id, statistics_type
FROM kx_st_user_earning
WHERE statistics_type = 3
) AS unique_records;
```
在此查询中,子查询部分通过 `DISTINCT` 对 `user_id` 和 `statistics_type` 进行去重,外层查询再对去重后的结果进行计数[^2]。
#### 方法四:结合多个字段进行去重和计数
如果需要对多个字段进行去重和计数,可以直接在 `COUNT(DISTINCT ...)` 中指定多个字段。例如:
```sql
SELECT COUNT(DISTINCT user_id, statistics_type) AS unique_combination_count
FROM kx_st_user_earning;
```
此查询将统计 `user_id` 和 `statistics_type` 组合的唯一值数量。
---
### 示例代码
以下是一个完整的示例,展示如何在一个表中同时进行去重和计数:
```sql
-- 查询 user_id 的唯一值数量
SELECT COUNT(DISTINCT user_id) AS unique_user_count
FROM kx_st_user_earning;
-- 查询每个 user_id 的记录数量,并筛选出重复记录
SELECT user_id, COUNT(*) AS record_count
FROM kx_st_user_earning
GROUP BY user_id
HAVING COUNT(*) > 1;
-- 查询多个字段的唯一组合数量
SELECT COUNT(DISTINCT user_id, statistics_type) AS unique_combination_count
FROM kx_st_user_earning;
```
---
阅读全文
相关推荐


















