我有一个使用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。
答案 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`