Как сгруппировать вычисляемый столбец в запросе?

0

Я пытаюсь использовать Case when инструкции для маркировки данных основаны на условиях. Затем мне нужно сгруппировать категории, чтобы я мог их подсчитать. Я не могу использовать временные таблицы для выполнения этой задачи.

SELECT player_name,
       weight,
       CASE WHEN weight > 250 THEN 'over 250'
            WHEN weight > 200 AND weight <= 250 THEN '201-250'
            WHEN weight > 175 AND weight <= 200 THEN '176-200'
            ELSE '175 or under' END AS weight_group
  FROM benn.college_football_players

Выход:

Over 250    10
201-250     50
176-200     3

и т.п.

  • 0
    лучше объясни свой вопрос .. код кажется правильным .. у тебя ошибка? показать сообщение об ошибке .. неправильный результат показать также ваш фактический результат.
Теги:
mariadb
group-by

2 ответа

0
Лучший ответ

Вы можете просто использовать одно и то же выражение case в предложении group by:

SELECT CASE WHEN weight > 250 THEN 'over 250'
            WHEN weight > 200 AND weight <= 250 THEN '201-250'
            WHEN weight > 175 AND weight <= 200 THEN '176-200'
            ELSE '175 or under' END AS weight_group,
       COUNT(*)
FROM benn.college_football_players
GROUP BY CASE WHEN weight > 250 THEN 'over 250'
            WHEN weight > 200 AND weight <= 250 THEN '201-250'
            WHEN weight > 175 AND weight <= 200 THEN '176-200'
            ELSE '175 or under' END
  • 0
    (Сокращенный синтаксис: GROUP BY 1 - означает столбец 1.)
  • 0
    @RickJames согласился, это будет работать в MySQL, но этот синтаксис не поддерживается некоторыми другими СУБД, и, на мой взгляд, его следует избегать для переносимости.
0

вы можете использовать производную таблицу (подзапрос) для группы, например:

  select  t.weight_group, count(*) from (
    SELECT player_name,
           weight,
           CASE WHEN weight > 250 THEN 'over 250'
                WHEN weight > 200 AND weight <= 250 THEN '201-250'
                WHEN weight > 175 AND weight <= 200 THEN '176-200'
                ELSE '175 or under' END AS weight_group
      FROM benn.college_football_players

  ) t 
  group by weight_group 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню