在聚合表达式中使用包含时 sql 查询出错
Posted
技术标签:
【中文标题】在聚合表达式中使用包含时 sql 查询出错【英文标题】:Error in sql query when using contains in aggregate expression 【发布时间】:2013-06-05 18:44:00 【问题描述】:查询:
SELECT
c,
COUNT
( WHEN a='11' AND contains(b,'aa') THEN 1 ELSE NULL END
) as total
from x
group by c
错误:
全文谓词不能出现在聚合表达式中。地方 子查询中的聚合表达式。
我使用包含是因为它在文本中搜索时使用索引,而且查询也只是这样,所以我只能将它放在聚合表达式中......请建议......
【问题讨论】:
为什么你认为仍然需要 COUNT? 是的,因为在我的原始查询中,我有 group by 子句... 所以添加完整的查询和预期的结果。不要提供部分信息,尤其是当 SQL Server 只允许在 WHERE 中包含 CONTAINS 时 【参考方案1】:CONTAINS 只能出现在 WHERE 子句中
SELECT
c,
COUNT(ContainsResult) AS total
FROM
(
SELECT
c, CASE WHEN a='11' THEN 1 ELSE NULL END AS ContainsResult
from
x
WHERE
contains(b,'aa')
UNION ALL
SELECT
c, NULL
from
x
WHERE
NOT contains(b,'aa')
) X1
GROUP BY
c
【讨论】:
【参考方案2】:试试这个 -
SELECT total = COUNT(
CASE WHEN a = '11'
AND CONTAINS(b, 'aa') THEN 1
END)
FROM x
【讨论】:
以上是关于在聚合表达式中使用包含时 sql 查询出错的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 索引视图:无法创建聚集索引,因为选择列表包含聚合函数结果的表达式
尝试执行不包含指定表达式“StaffDetails.StaffID”的查询作为聚合函数的一部分
选择列表中的无效表达式(不包含在聚合函数或 GROUP BY 子句中)
Access Query + 您的查询不包含指定表达式“TimeID”作为聚合函数的一部分
#1055 - SELECT 列表的表达式不在 GROUP BY 子句中,并且包含非聚合列,这与 sql_mode=only_full_group_by 不兼容