MySQL error: Non-grouping field is used in HAVING clause
MySQL error: Non-grouping field is used in HAVING clause
有没有办法更正此查询,使其在启用 ONLY_FULL_GROUP_BY
的情况下工作?
SELECT LOWER(s) AS lower_s, SUM(i) AS sum_i
FROM t
GROUP BY 1
HAVING LENGTH(lower_s) < 5
给出错误信息
Non-grouping field 'lower_s' is used in HAVING clause
你为什么不直接使用 where LENGTH(LOWER(s)) < 5
好像having
的用法不对
A HAVING clause in SQL specifies that an SQL SELECT statement should only return rows where aggregate values meet the specified conditions. It was added to the SQL language because the WHERE keyword could not be used with aggregate functions.[1]
无需在查询中使用 HAVING 子句。检查以下将满足您要求的查询。
试试这个:
SELECT LOWER(s) AS lower_s, SUM(i) AS sum_i
FROM t
WHERE LENGTH(LOWER(s)) < 5
GROUP BY 1;
解决方法是:
SELECT LOWER(s) AS lower_s, SUM(i) AS sum_i
FROM t
WHERE LENGTH(lower_s) < 5
GROUP BY 1
select lower_s, SUM(i) AS sum_i
from
(
SELECT LOWER(s) AS lower_s, i
FROM t
) dt
where LENGTH(lower_s) < 5
GROUP BY lower_s
符合 ANSI SQL 的答案,具有派生的 table,因此您只需编写一次 LOWER(s)
表达式。
有没有办法更正此查询,使其在启用 ONLY_FULL_GROUP_BY
的情况下工作?
SELECT LOWER(s) AS lower_s, SUM(i) AS sum_i
FROM t
GROUP BY 1
HAVING LENGTH(lower_s) < 5
给出错误信息
Non-grouping field 'lower_s' is used in HAVING clause
你为什么不直接使用 where LENGTH(LOWER(s)) < 5
好像having
的用法不对
A HAVING clause in SQL specifies that an SQL SELECT statement should only return rows where aggregate values meet the specified conditions. It was added to the SQL language because the WHERE keyword could not be used with aggregate functions.[1]
无需在查询中使用 HAVING 子句。检查以下将满足您要求的查询。
试试这个:
SELECT LOWER(s) AS lower_s, SUM(i) AS sum_i
FROM t
WHERE LENGTH(LOWER(s)) < 5
GROUP BY 1;
解决方法是:
SELECT LOWER(s) AS lower_s, SUM(i) AS sum_i
FROM t
WHERE LENGTH(lower_s) < 5
GROUP BY 1
select lower_s, SUM(i) AS sum_i
from
(
SELECT LOWER(s) AS lower_s, i
FROM t
) dt
where LENGTH(lower_s) < 5
GROUP BY lower_s
符合 ANSI SQL 的答案,具有派生的 table,因此您只需编写一次 LOWER(s)
表达式。