【发布时间】:2022-10-13 08:56:17
【问题描述】:
显示按体重分组的所有患者。 显示每个体重组的患者总数。 按重量组降序排列列表。
例如,如果他们的体重在 100 到 109 之间,他们将被归入 100 体重组,110-119 = 110 体重组,等等。
【问题讨论】:
-
考虑
FLOOR(weight/10)或其他东西作为您的排序字段
显示按体重分组的所有患者。 显示每个体重组的患者总数。 按重量组降序排列列表。
例如,如果他们的体重在 100 到 109 之间,他们将被归入 100 体重组,110-119 = 110 体重组,等等。
【问题讨论】:
FLOOR(weight/10) 或其他东西作为您的排序字段
所以像这样的东西?
SELECT FLOOR(t.weight/10) * 10 as weightGroup, count(*) as cnt
FROM YourTable t
GROUP BY FLOOR(t.weight/10)
ORDER BY FLOOR(t.weight/10) DESC
【讨论】:
我倾向于尝试避免使用昂贵的浮点函数,例如 FLOOR() 或 CEIL()。
将 FLOOR() 数字添加到下一个较小整数的技巧是在其上加上 0.5,然后使用 CONVERT() 将其硬转换为有符号整数。
WITH
--- some sample data, don't use in final query ...
indata(id,lb) AS (
SELECT 1,101
UNION ALL SELECT 2,102
UNION ALL SELECT 3,103
UNION ALL SELECT 4,104
UNION ALL SELECT 5,105
UNION ALL SELECT 6,106
UNION ALL SELECT 7,107
UNION ALL SELECT 8,108
UNION ALL SELECT 9,109
UNION ALL SELECT 10,110
UNION ALL SELECT 11,111
UNION ALL SELECT 12,112
UNION ALL SELECT 13,113
UNION ALL SELECT 14,114
UNION ALL SELECT 15,115
UNION ALL SELECT 16,116
UNION ALL SELECT 17,117
UNION ALL SELECT 18,118
UNION ALL SELECT 19,119
UNION ALL SELECT 20,120
)
-- real query starts here ...
SELECT
CONVERT ((lb / 10 - 0.5), SIGNED) AS grp
, COUNT(*) AS pat_count
FROM indata
GROUP BY grp
ORDER BY grp DESC;
-- out grp | patcount
-- out -----+----------
-- out 12 | 1
-- out 11 | 10
-- out 10 | 9
【讨论】:
这可能会有所帮助 选择计数 (patient_id), floor (weight/10)*10 作为 weight_group 来自患者 按重量分组 按 weight_group desc 排序;
【讨论】: