1

我有一个使用 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 - '有子句'中的未知列'列分组'”

作为一种解决方法,我做这样的事情:

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。

4

2 回答 2

0

根据文档,您不能在HAVING子句中使用函数:

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

您仅限于已检索的列。我不知道背后是否有技术原因,但这就是 SQL 标准所要求的。

于 2013-03-18T17:16:09.090 回答
0

尝试使UPPERinWHERE子句

      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`
于 2013-03-18T17:20:51.007 回答