我有一个MySQL表,该表有一个名为@{-1}
的列,其范围为0-1。我想计算分数为的行数:
我可以这样运行查询:
score
并对每个值执行此操作。不过,我想在一个查询中执行此操作。因此所需的输出格式应为:
SELECT COUNT(*)
FROM my_table
WHERE score > 0.1
有什么建议吗?我认为它涉及low, medium, high, very_high
200 156 123 96
,例如:
case when
但是,这并不说明0.4的分数既“低”又是“中”,因此并不完全正确。
任何想法都会很棒!
答案 0 :(得分:3)
您似乎正在寻找条件聚合:
SELECT
count(*) total,
SUM(CASE WHEN score BETWEEN 0.1 AND 0.3 THEN 1 ELSE 0 END) low,
SUM(CASE WHEN score BETWEEN 0.3 AND 0.6 THEN 1 ELSE 0 END) medium,
SUM(CASE WHEN score BETWEEN 0.6 AND 0.95 THEN 1 ELSE 0 END) high,
SUM(CASE WHEN score >= 0.95 THEN 1 ELSE 0 END) 'very_high'
FROM my_table
此查询将返回一行,显示分析的总行数和属于每个类别的行数。 col BETWEEN val1 AND val2
是col >= val1 AND col < val2
的快捷方式。
答案 1 :(得分:1)
您的方法非常接近,可以在您的条件下使用AND。
这可以做:
SELECT COUNT(*),
CASE WHEN score > 0.1 AND score <= 0.3 THEN "low"
WHEN score > 0.3 AND score <= 0.6 THEN "medium"
WHEN score > 0.6 AND score <= 0.95 THEN "high"
WHEN score > 0.95 THEN "very_high"
ELSE "very_low"
END AS score_group
FROM my_table
GROUP BY score_group