Псевдоним для предложения GROUP BY? - PullRequest
3 голосов
/ 29 ноября 2011

В MySQL можно использовать псевдоним в предложении GROUP BY, который был создан в предложении SELECT (см. MySQL Reference ).

Мне просто интересно, почему это такневозможно создать псевдоним в GROUP BY и использовать его в SELECT, который следует порядку выполнения оператора SELECT.

Другими словами, почему следующее неграмотно?

SELECT region, SUM(population)
  FROM population_us_states
 GROUP BY
       CASE state_name
               WHEN 'CT' THEN 'New England'
               WHEN 'RI' THEN 'New England'
               WHEN 'MA' THEN 'New England'
               WHEN 'ME' THEN 'New England'
               WHEN 'NH' THEN 'New England'
               WHEN 'VT' THEN 'New England'
               WHEN 'CA' THEN 'West Coast'
               WHEN 'OR' THEN 'West Coast'
               WHEN 'WA' THEN 'West Coast'
        ELSE 'other' END AS region;

Ответы [ 2 ]

4 голосов
/ 29 ноября 2011

Используйте вложенный SELECT - внутренний для извлечения совокупности и генерирования вычисляемого столбца, а внешний может GROUP BY этот столбец:

SELECT region, SUM(population) FROM (

   SELECT CASE ...

   ... AS region, population FROM population_us_states )

GROUP BY region
1 голос
/ 29 ноября 2011

Это потому, что group by ссылается на основное предложение, а не наоборот (или оба - отношения между ними не являются рекурсивными).

Вы можете сделать это в MySQL без использования подзапроса, но вы должны сгруппировать по значению, объявленному в вашем главном выборе - поэтому ваш первоначальный запрос недопустим, но следующее должно быть:

SELECT CASE state_name
               WHEN 'CT' THEN 'New England'
               WHEN 'RI' THEN 'New England'
               WHEN 'MA' THEN 'New England'
               WHEN 'ME' THEN 'New England'
               WHEN 'NH' THEN 'New England'
               WHEN 'VT' THEN 'New England'
               WHEN 'CA' THEN 'West Coast'
               WHEN 'OR' THEN 'West Coast'
               WHEN 'WA' THEN 'West Coast'
        ELSE 'other' END AS region,
        SUM(population)
  FROM population_us_states
 GROUP BY
       region;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...