sql中统计字段值数
时间: 2025-08-19 09:40:03 浏览: 5
### SQL 中使用 DISTINCT 和 COUNT 统计字段不同值的数量
在 SQL 查询中,`COUNT(DISTINCT column)` 是一种常用的方式来统计某个字段中的唯一值数量。这种方法可以确保只计算不重复的数据项。
#### 基本语法
以下是 `COUNT(DISTINCT ...)` 的基本语法结构:
```sql
SELECT COUNT(DISTINCT column_name) AS unique_count FROM table_name;
```
此语句会返回指定表中某一列的不同值总数[^1]。
#### 结合条件过滤
如果需要进一步筛选数据并仅对满足特定条件的记录进行去重统计,则可以在 `CASE WHEN` 表达式中嵌套逻辑判断。例如:
```sql
SELECT
COUNT(DISTINCT CASE WHEN userType = 1 THEN userId ELSE NULL END) AS type_1_users,
COUNT(DISTINCT CASE WHEN userType = 2 THEN userId ELSE NULL END) AS type_2_users
FROM user_table;
```
上述代码片段展示了如何针对不同类型用户分别统计其唯一的 ID 数量[^3]。
#### 性能考量
关于性能方面,在 MySQL 数据库里比较常见的做法有三种形式来实现类似的汇总操作——即通过 `COUNT(*)`, `COUNT(1)`, 或者 `COUNT(field)` 来完成。然而当涉及到去除重复记录时 (`DISTINCT`) ,通常推荐直接采用 `COUNT(DISTINCT field)` 方式因为这样既直观又高效[^2]。
需要注意的是虽然理论上来说对于索引良好的大容量表格而言这些差异可能不会太明显;但在实际应用过程中还是应该依据具体情况测试各种写法之间的速度差别以便选取最优解方案。
### 示例代码
下面提供了一个完整的例子用于演示如何在一个假设名为 employees 的数据库表上执行此类查询:
```sql
-- 计算各部门员工人数(排除重复)
SELECT department, COUNT(DISTINCT employee_id) AS num_unique_employees
FROM employees
GROUP BY department;
-- 对于某些特殊类型的雇员单独做相同处理
SELECT
COUNT(DISTINCT CASE WHEN position='manager' THEN employee_id ELSE NULL END )AS managers,
COUNT(DISTINCT CASE WHEN position='developer' THEN employee_id ELSE NULL END )AS developers
FROM employees;
```
以上脚本不仅能够帮助理解基础概念而且还能展示更复杂的场景下该技术的应用实例.
阅读全文
相关推荐



















