我在按年龄组显示数据时遇到了问题。以下是我的问题:
SELECT
CASE WHEN age BETWEEN 0 AND 18 OR age IS NULL THEN '0-18'
WHEN age BETWEEN 19 AND 30 THEN '19-30'
WHEN age BETWEEN 31 AND 35 THEN '31-35'
WHEN age BETWEEN 36 AND 50 THEN '36-50'
WHEN age BETWEEN 51 AND 100 THEN '50+'
END AS age_group,
COALESCE(COUNT(*), 0) AS count
FROM patient_registration
GROUP BY age_group;
我试图运行上面的查询来显示数据,你可以看到上面的查询执行没有任何错误,但我需要一个年龄组的解决方案,其中计数为0,例如。
我没有0到18岁之间的年龄记录,它不会显示在输出中,但我希望这样显示记录
| 年龄组|计数|
| - ------|- ------|
| 0-18 |无|
| 十九至三十岁|一百九十二|
| 三十一至三十五|八十三|
| 三十六至五十岁|二百二十三|
| 50岁以上|二百二十二|
如果不满足,我想显示计数0.
以下是我目前所做的尝试:
SELECT
CASE
WHEN age BETWEEN 0 AND 18 OR age COUNT is NULL THEN '0-18'
WHEN age BETWEEN 19 AND 30 THEN '19-30'
WHEN age BETWEEN 31 AND 35 THEN '31-35'
WHEN age BETWEEN 36 AND 50 THEN '36-50'
WHEN age BETWEEN 51 AND 100 THEN '50+'
END AS age_group,
COALESCE(COUNT(*), NULL) AS count
FROM patient_registration
GROUP BY age_group;
有没有别的办法可以试试?
3条答案
按热度按时间2w2cym1i1#
这个选项可能对你有用。我返回所有的列,不管计数是多少,每一列都是有问题的年龄段。
结果会是
kkih6yb82#
为了达到您想要的结果,您必须使用一个虚拟表,然后使用LEFT连接来生成这个结果-
zkure5ic3#
查询将不计算年龄无效(负数,大于999)或未设置年龄(为NULL)的行。
此外,您可能有一个包含许多范围集的表,并使用它来代替合成表,从而使查询动态化。