对于我的问题,我找不到很好的解释。
我有一张桌子:
user | 70Y | hospital
-------+-------+----------
1 | 18 | 1
2 | 70 | 1
3 | 90 | 0
我需要查找的是有多少人的70岁以上,以及是否有多少人在医院里。
我正在使用它来查找他的年龄超过70岁:
SUM(CASE WHEN 70y > 70 THEN 1 ELSE 0 END) AS 'old_person'
但是我怎么发现他在医院呢?
我期望从表中得到的是:
| old_person | old_person_in_hospital|
+------------+-----------------------+
| 18 | 1 |
如果我想添加更多的列,比如说检查40岁的孩子,最简单的方法是什么?
我对表的期望:
| old_person | 40y_person |
+-------------+---------------------+
| 18 | 16 |
in hospital | 1 | 2 |
答案 0 :(得分:1)
每列都需要一个案例:
select
SUM(Case when [70y] > 70 then 1 else 0 end) old_person,
SUM(Case when [70y] > 70 and hospital = 1 then 1 else 0 end) old_person_in_hospital
from tablename
答案 1 :(得分:0)
将其他情况用于医院计数
select SUM(Case when 70y > 70 then 1 else 0 end) as old_person,
sum (Case when 70y > 70 and hospital=1 then 1 else 0 end ) hospital
from tbale
答案 2 :(得分:0)
如何将条件移至where
子句?
select count(*) as old_person,
sum(hospital) as old_person_in_hospital
from tablename
where [70y] > 70;
如果您想添加更多年龄段,则可以使用条件汇总。但是,我建议您改用聚合,然后将结果放在不同的行中。例如:
select (age / 10) as decade,
count(*) as num_people,
sum(hospital) as num_in_hospital
from tablename
group by (age / 10);