列未知在列别名的HAVING子句中使用UPPER

时间:2013-03-18 17:04:18

标签: mysql alias having clause

我有一个使用DataTables进行服务器端处理的webapp。我有一些SQL查询,可以在列中任意重新组合数据,所以我得到这样的查询:

SELECT case `column`
WHEN 'value1' then 'group1'
WHEN 'value2' then 'group1'
ELSE `column` END AS `column grouped`, SUM(`2010`)
GROUP BY `colonne grouped`

现在,我根据用户输入添加一些过滤,我喜欢这样:

SELECT case `column`
WHEN 'value1' then 'group1'
WHEN 'value2' then 'group1'
ELSE `column` END AS `column grouped`, SUM(`2010`)
GROUP BY `column grouped`
HAVING `column grouped` LIKE '%test%'

它仍然可以正常工作,但是当我试图使整个案例变得无用时,我的困境就来了,所以我做了:

SELECT case `column`
WHEN 'value1' then 'group1'
WHEN 'value2' then 'group1'
ELSE `column` END AS `column grouped`, SUM(`2010`)
GROUP BY `colonne grouped`
HAVING UPPER(`column grouped`) LIKE '%test%'

现在我将'#1054 - 未知列'列分组'在'having子句'“

作为一种解决方法,我会这样做:

SELECT case `column`
WHEN 'value1' then 'group1'
WHEN 'value2' then 'group1'
ELSE `column` END AS `column grouped` , SUM(`2010`)
GROUP BY `colonne grouped`
HAVING UPPER(case `column`
WHEN 'value1' then 'group1'
WHEN 'value2' then 'group1'
ELSE `column` END) LIKE '%test%'

但这不太方便。任何人都知道为什么我无法将UPPER与自定义别名一起使用?

我顺便使用MySQL 5.5。

2 个答案:

答案 0 :(得分:0)

根据docs,您不能使用HAVING子句中的函数:

  

SQL标准要求HAVING必须仅引用列中的列   GROUP BY子句或聚合函数中使用的列。然而,   MySQL支持对此行为的扩展,并允许HAVING   将SELECT子列表中的列和外部子查询中的列称为   好。

您只能使用已检索过的列。我不知道是否有技术原因,但这是SQL标准所要求的。

答案 1 :(得分:0)

尝试在UPPER子句中设置WHERE

      SELECT case `column`
     WHEN 'value1' then 'group1'
     WHEN 'value2' then 'group1'
     ELSE `column` END AS `column grouped`, SUM(`2010`)
     WHERE UPPER(`column grouped`) LIKE '%test%'
     GROUP BY `colonne grouped`