Как я могу устранить неоднозначность метки предложения SELECT, используемого в ГРУППЕ BY?

#mysql

#mysql

Вопрос:

У меня есть запрос:

 SELECT
  ...
  (some expression) AS Country
FROM
  Sometable
  ...
GROUP BY Country;
  
  • Sometable имеет столбец с именем Country (это нельзя изменить).
  • Один из столбцов результата назван Country (это тоже нельзя изменить).

Это работает (я хочу, чтобы GROUP BY применялось к столбцу результатов, и MySQL понимает это именно так).

Но он выдает предупреждение:

 Warning: Column 'Country' in group statement is ambiguous
  

Итак, я хочу устранить неоднозначность GROUP BY . Но единственные квалификаторы, которые я смог найти, — это указать базу данных или таблицу (как в: Sometable.Country ). Было бы неплохо, если бы метка использовалась в двух разных таблицах, или если бы я хотел выбрать экземпляр метки, который поступает из таблицы. Но мне нужен какой-то Select.Country определитель, чтобы указать, что имя, которое я хочу использовать, является именем из SELECT предложения, а не из таблицы.

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

Ответ №1:

 SELECT a,b,c,d, country2 AS country FROM (
   SELECT
  a,b,c,d,
  (some expression) AS Country2
  FROM
    Sometable
    ...
  GROUP BY Country ) s;
  

Ответ №2:

Если это выражение, по которому вы хотите сгруппировать, вы бы сделали:

 Group By (some expression)
  

Т.е. не используйте псевдоним в группе By. Используйте само выражение. Единственный другой способ — это инкапсулировать запрос с выражением в производную таблицу / подзапрос.