Могу ли я использовать оператор case не в запросе, а ТОЛЬКО в group by ()? - PullRequest
0 голосов
/ 04 сентября 2018

Могу ли я использовать оператор case только в Group by ()?

Например, мне нужно сгруппировать результаты моего расчета по группам некоммерческого уровня.

user_id   income
1          10
2          20
3          100
4          500

Я хочу получить результат:

 number_of_users  income
  1               <10
  2               10 - 150
  1               >150

Могу ли я использовать оператор case не в запросе, а ТОЛЬКО в group by ()?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Модифицированная версия ответа @Lukasz.

select income, COUNT(*) AS num_of_users
from
(
    SELECT CASE WHEN income < 10 THEN '<10'
                WHEN income <= 150 THEN '10-150'
                ELSE '> 150'
           END AS income
    FROM tab
) dt
group by income

Использование производной таблицы для

  • Сохраните набор текста
  • Избегайте глупых ошибок, вызванных различными выражениями регистра в списке выбора и в предложении group by
  • Быть совместимым с ANSI SQL.
0 голосов
/ 04 сентября 2018

Вы можете использовать CASE:

SELECT CASE WHEN income < 10 THEN '<10'
              WHEN income <= 150 THEN '10-150'
              ELSE '> 150'
         END AS income, COUNT(*) AS num_of_users
FROM tab
GROUP BY CASE WHEN income < 10 THEN '<10'
              WHEN income <= 150 THEN '10-150'
              ELSE '> 150'
         END
...