SQL:基于多个条件的行数,单个查询

时间:2019-01-16 23:07:32

标签: mysql sql

我有一个MySQL表,该表有一个名为@{-1}的列,其范围为0-1。我想计算分数为的行数:

  • 大于0.1
  • 大于0.3
  • 大于0.6
  • 大于0.95

我可以这样运行查询:

score

并对每个值执行此操作。不过,我想在一个查询中执行此操作。因此所需的输出格式应为:

SELECT COUNT(*)
FROM my_table
WHERE score > 0.1

有什么建议吗?我认为它涉及low, medium, high, very_high 200 156 123 96 ,例如:

case when

但是,这并不说明0.4的分数既“低”又是“中”,因此并不完全正确。

任何想法都会很棒!

2 个答案:

答案 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 val2col >= 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