SELECT COUNT搭配HAVING NOT IN的SQL语法报错问题求解
问题背景
需要统计在线状态的学生用户总数,查询结果需排除账号类型为Admin、Professor的账号,以下SQL运行时抛出语法错误:
SELECT COUNT(`status`) FROM `tbl_registration` WHERE `status` = 'Online' NOT HAVING accounttype IN ('Admin','Professor')
错误原因
- 子句误用:
HAVING仅用于GROUP BY分组后对聚合结果做过滤,当前查询无分组逻辑,且accounttype是行级原生字段,不适合用HAVING做过滤 - 语法逻辑缺失:多个并列过滤条件未使用逻辑运算符连接,排除指定值的行级过滤直接使用
NOT IN语法即可,不需要嵌套HAVING
修正后的SQL语句
SELECT COUNT(`status`) FROM `tbl_registration` WHERE `status` = 'Online' AND `accounttype` NOT IN ('Admin', 'Professor')
补充说明
- 若不需要排除
status字段为NULL的记录,统计全量在线用户数可以替换为COUNT(*),执行效率更高 - 若表中存在同一用户的多条重复记录,需要统计去重后的用户总数,可以将计数部分改为
COUNT(DISTINCT 你的用户唯一标识字段名)
内容的提问来源于stack exchange,提问作者Marr Camino
相关产品推荐
相关产品推荐

