select count(*) 查询满足条件的记录的条数

本文介绍了SQL中CASE WHEN语句的基本用法及其在不同场景下的应用实例,包括如何使用CASE WHEN进行条件判断并返回相应的值,以及如何结合SUM函数进行聚合计算。

查询的只满足一种条件的记录数量:

select count(*) from T0010 t where t.d0150='20' ;

查询满足两种条件的记录数量:

select sum(case when t.d0150='20' then 1 else 0 end) as slaughter, sum(case when t.d0150='30' then 0 else 1 end) as slaughter2 from T0010 t;

case when ...then . else ...end 的用法:

case when 条件 then 返回的值 else 返回的值 end

select case when t.d0150='20' then 1 else 0 end from T0010 t

select sum(case when t.d0150='20' then 1 else 0 end) from T0010 t

sum()求和

sun(n):得到的值是n*记录的条数

附录:

SQL中的CASE WHEN使用
Case具有两种格式。简单Case函数和Case搜索函数。
--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END

<think> 我们讨论了如何在Shell脚本中处理两个表格数据,现在用户询问如何查询SELECT *语句返回结果的记录条数。这是一个关于SQL查询的问题。 根据引用[1]和[3],SELECT语句的基本结构包括SELECT子句、FROM子句等。要获取返回结果的记录条数,我们可以使用SQL的COUNT聚合函数。 方法:将SELECT *替换为COUNT(*),这样就会返回满足条件记录总数。 示例: 原始查询SELECT * FROM table_name WHERE condition; 改为计数查询SELECT COUNT(*) FROM table_name WHERE condition; 这样就会返回一个数字,即记录条数。 注意:COUNT(*)会统计所有行的数量,包括NULL值。如果只统计非NULL值的行,可以使用COUNT(column_name)。 另外,引用[2]和[4]提到了查询效率和数据类型的影响。对于大型表,使用COUNT(*)可能较慢,但它是获取记录数的标准方法。如果表非常大,且只需要近似值,有些数据库系统(如MySQL的InnoDB)可能有更快的近似方法(例如使用SHOW TABLE STATUS),但准确计数还是用COUNT(*)。 因此,用户只需将原来的SELECT *语句改为SELECT COUNT(*)即可,同时保留相同的WHERE条件(如果有的话)。 例如: 原语句:SELECT * FROM employees; 计数语句:SELECT COUNT(*) FROM employees; 如果有限制条件,如部门为销售部: 原语句:SELECT * FROM employees WHERE department = 'Sales'; 计数语句:SELECT COUNT(*) FROM employees WHERE department = 'Sales'; 这样就会返回销售部门的员工数量。 生成相关问题: 1. 如何优化大表的COUNT(*)查询? 2. COUNT(1)和COUNT(*)有什么区别? 3. 如何在SQL查询同时返回数据和记录总数? </think> 要查询 `SELECT *` 语句返回结果的记录条数,只需将 `SELECT *` 替换为 `SELECT COUNT(*)` 即可。以下是详细方法和示例: ### 方法说明 1. **基本语法**: ```sql SELECT COUNT(*) AS total_rows FROM 表名 [WHERE 条件]; ``` 2. **说明**: - `COUNT(*)`:统计所有满足条件的行数(包括NULL值) - `AS total_rows`:可选,为结果列命名 - `WHERE`:可选,添加过滤条件 3. **执行效率**: - 对比 `SELECT *`:`COUNT(*)` 仅返回单个数字,避免传输大量数据 - 数值型字段统计最快(引用[4]原理)[^4] ### 示例场景 #### 1. 统计整张表的行数 ```sql -- 统计 employees 表总记录SELECT COUNT(*) AS employee_count FROM employees; ``` 输出示例: ``` employee_count -------------- 1000 ``` #### 2. 带条件的计数 ```sql -- 统计薪资大于5000的员工数 SELECT COUNT(*) AS high_salary_count FROM employees WHERE salary > 5000; ``` #### 3. 结合GROUP BY分组计数 ```sql -- 按部门统计员工数量 SELECT department_id, COUNT(*) AS dept_employee_count FROM employees GROUP BY department_id; ``` ### 性能优化技巧 1. **索引优化**: ```sql -- 在WHERE条件字段添加索引 CREATE INDEX idx_salary ON employees(salary); ``` 2. **近似计数**(百万级数据适用): ```sql -- MySQL快速估值(误差<1%) SHOW TABLE STATUS LIKE 'employees'; ``` 查看结果中的 `Rows` 字段值[^2] 3. **分页统计优化**: ```sql -- 获取第10-20条记录同时返回总数(引用[2]改进)[^2] SELECT SQL_CALC_FOUND_ROWS * FROM employees LIMIT 10 OFFSET 9; SELECT FOUND_ROWS() AS total_count; ``` > **重要提示**:`COUNT(1)` 与 `COUNT(*)` 性能基本一致,但 `COUNT(column)` 会跳过NULL值且效率更低[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值