如何消除GROUP BY中使用的SELECT子句的标签的歧义?

时间:2011-06-09 17:29:30

标签: 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个实例之一(表格的列),可以删除此警告,但如果我想选择另一个(不是结果)。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

如果是你要分组的表达式,你可以这样做:

Group By (some expression)

即,不要在Group By中使用别名。使用表达式本身。唯一的另一种方法是将带有表达式的查询封装到派生表/子查询中。