SQL: подсчет количества строк на основе нескольких условий, один запрос - PullRequest
0 голосов
/ 17 января 2019

У меня есть таблица MySQL, в которой есть столбец с именем score, который находится в диапазоне от 0 до 1. Я хочу рассчитать количество строк, где оценка:

  • Больше 0,1
  • Больше 0,3
  • Больше 0,6
  • Больше 0,95

Я могу выполнить запрос следующим образом:

SELECT COUNT(*)
FROM my_table
WHERE score > 0.1

И сделать это для каждого значения. Я бы хотел сделать это одним запросом. Таким образом, желаемый формат вывода будет выглядеть примерно так:

low, medium, high, very_high
200   156    123       96

Есть предложения? Я думаю, что это включает case when, что-то вроде:

SELECT COUNT(*), 
       CASE WHEN score > 0.1 THEN "low"
       CASE WHEN score > 0.3 THEN "medium"
       CASE WHEN score > 0.6 THEN "high"
       CASE WHEN score > 0.95 THEN "very_high" end as score_group
FROM my_table
GROUP BY score_group

Но это не учитывает тот факт, что оценка 0,4 будет как "низкой", так и "средней", так что это не совсем верно.

Любые мысли были бы великолепны!

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Ваш подход довольно близок, вы можете использовать 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
0 голосов
/ 17 января 2019

Вы, похоже, ищете условную агрегацию:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...