首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么这两个带有否定WHERE子句的SELECT COUNT(*)不能正确求和?

这两个带有否定WHERE子句的SELECT COUNT(*)不能正确求和的原因是因为在SQL中,COUNT函数会统计满足条件的行数。当使用否定的WHERE子句时,意味着要排除满足条件的行,而COUNT函数无法区分被排除的行和未被排除的行,导致计数结果不准确。

具体来说,当使用带有否定WHERE子句的SELECT COUNT(*)时,可能会出现以下两种情况:

  1. 使用NOT关键字:例如,SELECT COUNT(*) FROM table WHERE NOT condition。在这种情况下,COUNT函数会统计满足条件的行数,然后再对满足条件的行数取反。这样会导致计数结果不准确,因为COUNT函数无法区分被排除的行和未被排除的行。
  2. 使用<>或!=运算符:例如,SELECT COUNT(*) FROM table WHERE column <> value。在这种情况下,COUNT函数会统计满足条件的行数,但是无法区分被排除的行和未被排除的行。因此,计数结果也会不准确。

为了正确求和,可以考虑使用其他方法,例如使用子查询或者使用SUM函数。具体的解决方法取决于具体的业务需求和数据结构。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云数据库(https://cloud.tencent.com/product/cdb)
  • 腾讯云云服务器(https://cloud.tencent.com/product/cvm)
  • 腾讯云人工智能(https://cloud.tencent.com/product/ai)
  • 腾讯云物联网(https://cloud.tencent.com/product/iot)
  • 腾讯云移动开发(https://cloud.tencent.com/product/mobdev)
  • 腾讯云存储(https://cloud.tencent.com/product/cos)
  • 腾讯云区块链(https://cloud.tencent.com/product/bc)
  • 腾讯云元宇宙(https://cloud.tencent.com/product/mu)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

原创 数据库3

20 除法 否定否定方法 是种类似除法操作 下面这种是集合差操作:(可能不支持)这个是 除法操作 聚集函数计算 count(*)—统计关系里面有多少元组 count(A)–计算属性...A有多少个值 加distinct 就是查有多少不同值 sum 就是把所有是a属性求和 avg 求均值 A是某个表一个单个属性 举例 举例 21 分组聚集函数计算 找每级水手最小年龄...这种是没法用 他没法用for 正确做法 group by是分组属性值相等原则做分组 having是对组做筛选 where 对元组做筛选 ** 其他例子 ** 过程...22 更复杂分组聚集函数计算 **注意:**select.having出现子句 必须在group by(这个集合子集)里面出现过 23CAST与CASE表达式 空值 — 暂时不知道啊 那种

21920

知识点、SQL语句学习及详细总结

SELECT MAX(Grade) 最高分,MIN(Grade) 最低分 FROM SC WHERE Cno = 'C001' 聚合函数不能出现在WHERE子句中!...Sno 学号, COUNT(*)  选课门数,AVG(Grade) 平均成绩 From SC Group BY Sno 带WHERE子句分组(统计每个系女生人数)SELECT Dept, COUNT...在HAVING子句中可以使用聚合函数,但在WHERE子句不能,通常与GROUP子句一起使用。...= 'C001') 这个例子,连接查询是错误,嵌套子查询中方法一在子查询中否定是错误!嵌套子查询中方法二在外查询中否定正确!...通常情况下,对于这种带有部分否定条件查询都应该用子查询来实现,而且应该放在外层! 2.2 使用比较测试嵌套子查询 SELECT FROM...

2K20
  • 关于 Oracle 分组查询

    组函数 COUNT()(个数)、SUM()(求和)、AVG()(平均)、MAX()(最大值)、MIN()(最小值)。...正确代码:SELECT COUNT(empno) FROM emp ; 错误代码:SELECT COUNT(empno),ename FROM emp ; · 限制二:使用统计查询时(存在 GROUP...正确代码: SELECT deptno,COUNT(empno) FROM emp GROUP BY deptno ; 错误代码: SELECT deptno,COUNT(empno),ename...正确代码: SELECT MAX(COUNT(empno)) FROM emp GROUP BY deptno ; 错误代码: SELECT deptno,MAX(COUNT(empno)) FROM...· WHERE 子句:是在分组前使用,而且不能够使用统计函数进行验证,经过 WHERE 筛选后数据才可以分组; · HAVING 子句:必须结合 GROUP BY 子句一起出现,是在分组后过滤,可以使用统计函数

    59610

    MySQL 查询专题

    如果有疑问,请参阅相应 DBMS 文档。 SELECT语句有一个特殊 WHERE 子句,可用来检查具有 NULL 值列。这个WHERE子句就是 ISNULL 子句。...NOT操作符 WHERE 子句 NOT 操作符有且只有一个功能,那就是否定它之后所跟任何条件。 GROUP BY 创建分组 GROUP BY 语句根据一个或多个列对结果集进行分组。...在分组列上我们可以使用 COUNT, SUM, AVG,等函数。 在使用 GROUP BY 子句前,需要知道一些重要规定。...如果在 SELECT 中使用表达式,则必须在 GROUP BY 子句中指定相同表达式。不能使用别名。...❑ 大多数SQL实现不允许 GROUP BY 列带有长度可变数据类型(如文本或备注型字段)。 ❑ 除聚集计算语句外,SELECT 语句中每一列都必须在 GROUP BY 子句中给出。

    5K30

    SQL 基础(四)单关系数据查询

    from tb_student 2.查询全部信息 SELECT * FROM tb_student 可以看到显示了表中所有学生所有属性信息 3.查询表单身份信息 不使用 WHERE 子句无条件查询称投影查询...where score NOT BETWEEN 70 AND 90 -- NOT 否定 4.确定集合(全匹配) 查询成绩表中,选修 c03、c17 课号学生学分和学号信息 select cno,sno...' *注:重点注意 符号 5.模糊查询(部分匹配) 当我们在不能清楚知道所查询数据精确值时,可以使用模糊查询方式检索数据,利用如下通配符以实现模糊搜索 字符中可加通配符 通配符 功能 示例...常用库函数(聚合函数): 函数名称 功能 AVG 按列求平均值 SUM 按列求和 MAX 求列最大值 MIN 求列最小值 COUNT 按列求个数 count(*) 对表中数目进行计数,无论是否为空...(*)>=5 order by cno asc *注:各子句顺序 WHERE 、GROUP BY、HAVING 排序查询结果 ORDER BY 查询排序结果,位置必须在其他子句后,指定缺省默认为 升序

    1.2K30

    GROUP BY与COUNT用法详解

    (整个表中不止这两个字段)表示数据集中字段1相等,字段2也相等数据归为一组,只显示一条数据。...用聚合函数把这三条记录整合成一条记录count(DepartmentName) WHERE和 HAVING HAVING子句可以让我们筛选成组后各组数据。...WHERE字句中不能使用聚合函数 举例说明: 一、显示每个地区总人口数和总面积....相反,HAVING子句可以让我们筛选成组后各组数据 需要注意说明:当同时含有where子句、group by 子句 、having子句及聚集函数时,执行顺序如下: 执行where子句查找符合条件数据...having子句where子句都可以用来设定限制条件以使查询结果满足一定条件限制。 having子句限制是组,而不是行。where子句不能使用聚集函数,而having子句中可以。

    2.3K20

    MySQL最常用分组聚合函数

    函数 ①count(*):返回表中满足where条件数量 mysql> select count(*) from salary_tab where salary='1000'; +--------...规则:   ①出现在SELECT子句单独列,必须出现在GROUP BY子句中作为分组列   ②分组列可以不出现在SELECT子句中   ③分组列可出现在SELECT子句一个复合表达式中   ...,然后将其放在对应数据格中,那么完成这个步骤就是前面讲到聚合函数,这也就是为什么这些函数叫聚合函数了。...:对分组结果进行过滤 注意:   不能使用WHERE子句对分组后结果进行过滤   不能WHERE子句中使用组函数,仅用于过滤行 mysql> select playerno -> from...having子语句与where子语句区别:   where子句在分组前对记录进行过滤;   having子句在分组后对记录进行过滤 mysql> select salary,count(*) from

    5.1K10

    《SQL必知必会》万字精华-第1到13章

    子句,能够动态地建立where子句 NOT操作符 NOT操作符只有一个功能:就是否定后面所跟任何条件。...-- 去重之后再求平均值 FROM Products WHERE vend_id = 'DLLO1'; -- 指定特定行 笔记: 1、DISTINCT不能用于COUNT(*);如果指定列名...; 分组数据 分组使用是两个子句: GROUP BY() HAVING() 创建分组 分组是使用SELECT子句GROUP BY子句建立,看个例子: SELECT vend_id ,COUNT...可以对分组进行嵌套 GROUP BY子句中列出每一列都是检索列或者有效表达式(但是不能是聚集函数) 如果在SELECT中使用表达式,则必须在GROUP BY子句中使用相同表达式,而不是使用别名 除了聚集函数外...外连接 ON Customers.cust_id = Orders.cust_id 带有聚集函数联结 检索所有顾客及每个顾客所有的订单数: SELECT C.cust_id ,COUNT(O.order_num

    7K00

    Vc数据库编程基础MySql数据库表查询功能

    select * from stu where name like "张%"; 我们想查询带有张的人.都是不知道那个.所以就全部查询了. 下划线查询. 下划线代表占位查询....函数 ①count(*):返回表中满足where条件数量 mysql> select count(*) from salary_tab where salary='1000'; +--------...,然后将其放在对应数据格中,那么完成这个步骤就是前面讲到聚合函数,这也就是为什么这些函数叫聚合函数了。...:对分组结果进行过滤 注意:   不能使用WHERE子句对分组后结果进行过滤   不能WHERE子句中使用组函数,仅用于过滤行 mysql> select playerno -> from...having子语句与where子语句区别:   where子句在分组前对记录进行过滤;   having子句在分组后对记录进行过滤 mysql> select salary,count(*) from

    9.7K30

    MySQL最常用分组聚合函数

    函数 ①count(*):返回表中满足where条件数量 mysql> select count(*) from salary_tab where salary='1000'; +--------...规则:   ①出现在SELECT子句单独列,必须出现在GROUP BY子句中作为分组列   ②分组列可以不出现在SELECT子句中   ③分组列可出现在SELECT子句一个复合表达式中   ...,然后将其放在对应数据格中,那么完成这个步骤就是前面讲到聚合函数,这也就是为什么这些函数叫聚合函数了。...:对分组结果进行过滤 注意:   不能使用WHERE子句对分组后结果进行过滤   不能WHERE子句中使用组函数,仅用于过滤行 mysql> select playerno -> from...having子语句与where子语句区别:   where子句在分组前对记录进行过滤;   having子句在分组后对记录进行过滤 mysql> select salary,count(*) from

    5.2K20

    SQL基础-->分组与分组函数

    |ALL]n) -- 求平均值,忽略空值 COUNT({*|[DISTINCT|ALL]expr}) -- 统计个数,其中expr用来判定非空值(使用*计算所有选定行,包括重复行和带有空值行)...带有expr参数函数数据类型可以为CHAR,VARCHAR2,NUMBER,DATE. 所有分组函数都忽略空值。...可以使用NVL 函数强制分组函数包含空值,如:*/ select avg(nvl(comm,0)) from emp; /* 五、GROUP BY 子句语法: 使用GROUP BY 子句可以将表中行分成更小组...,然后使用分组函数返回每一组汇总信息*/ SELECT column, group_function(column) FROM table [WHERE condition] [GROUP BY...中出现列,如果未出现在分组函数中,则GROUP BY子句必须包含这些列 WHERE 子句可以某些行在分组之前排除在外 不能在GROUP BY 中使用列别名 默认情况下GROUP BY列表中列按升序排列

    3.2K20

    SQL 进阶技巧(上)

    -- 坏示例 SELECT col1_1, col_2, col_3, COUNT(*) FROM tbl_A WHERE col1_1 = 'a' AND col1_2 = ( SELECT...这样可能会产生潜在性能问题:排序,会产生排序代表性运算有下面这些 GROUP BY 子句 ORDER BY 子句 聚合函数(SUM、COUNT、AVG、MAX、MIN) DISTINCT 集合运算符...三、能写在 WHERE 子句条件不要写在 HAVING 子句里 下列 SQL 语句返回结果是一样: -- 聚合后使用 HAVING 子句过滤 SELECT sale_date, SUM(quantity...,原因主要有两点 使用 GROUP BY 子句进行聚合时会进行排序,如果事先通过 WHERE 子句能筛选出一部分行,能减轻排序负担 在 WHERE 子句中可以使用索引,而 HAVING 子句是针对聚合后生成视频进行筛选...六、尽量避免使用否定形式 如下几种否定形式不能用到索引: !

    1.1K20

    除了会排序,你对ORDER BY用法可能一无所知!

    导读 为什么只有ORDER BY后面可以使用列别名 为什么不推荐使用ORDER BY后接数字来排序 为什么视图和子查询里面不能使用ORDER BY …… 小伙伴们在进行SQL排序时,都能很自然使用到...Student集合 但是对于带有排序作用ORDER BY子句查询,它返回是一个对象,其中行按特定顺序组织在一起,我们把这种对象称为游标。...从返回消息中我们可以看到,重命名后City并不能WHERE识别,所以才会报“列名'City'无效”提示。...从上面的几个测试示例结果中,可以得出我们结论是正确:ORDER BY子句是唯一能重用列别名一步。...必须在主查询末尾继续添加一个ORDER BY子句才能对结果集生效,就像我们例子中写那样。 除非逻辑要求,一般情况下并不推荐大家这样巧妙避开子查询中不能使用ORDER BY限制。

    2.3K30

    SQL中order by高级用法

    导读 为什么只有ORDER BY后面可以使用列别名 为什么不推荐使用ORDER BY后接数字来排序 为什么视图和子查询里面不能使用ORDER BY …… 小伙伴们在进行SQL排序时,都能很自然使用到...Student(ID,Name,Age) Student集合 但是对于带有排序作用ORDER BY子句查询,它返回是一个对象,其中行按特定顺序组织在一起,我们把这种对象称为游标。...='广州' 执行结果如下: 从返回消息中我们可以看到,重命名后City并不能WHERE识别,所以才会报“列名'City'无效”提示。...AS City FROM Customers GROUP BY 城市 HAVING COUNT(City)>1 结果如下: 5、测试ORDER BY后面使用列别名 SELECT 姓名 AS Name...城市 AS City FROM Customers ORDER BY 1,2,3 结果如下: 这样写结果,针对当前查询是正确没有问题,ORDER BY后面的数字1,2,3分别代表SELECT后面的第

    11610

    数据库优化:SQL高性能优化指南,助你成就大神之路!

    这样可能会产生潜在性能问题:排序,会产生排序代表性运算有下面这些 GROUP BY 子句 ORDER BY 子句 聚合函数(SUM、COUNT、AVG、MAX、MIN) DISTINCT 集合运算符...3、能写在 WHERE 子句条件不要写在 HAVING 子句里 下列 SQL 语句返回结果是一样: -- 聚合后使用 HAVING 子句过滤 SELECT sale_date, SUM(quantity...子句一般都会进行排序,以对行进行排列和替换,不过如果指定带有索引列作为这两者参数列,由于用到了索引,可以实现高速查询,由于索引是有序,排序本身都会被省略掉 5、使用索引时,条件表达式左侧应该是原始字段...6、尽量避免使用否定形式 如下几种否定形式不能用到索引: !...不要对主键进行修改 17、在无 WHERE 条件下要计算表行数,优先使用 count(*) 优先使用以下语句来统计行数, innoDB 5.6之后已经对此语句进行了优化 SELECT COUNT(*)

    84420

    学习SQLite之路(二)

    GLOB 与 LIKE 不同之处在于,它是大小写敏感。 NOT NOT 运算符是所用逻辑运算符对立面。比如 NOT EXISTS、NOT BETWEEN、NOT IN,等等。它是否定运算符。...SQLite AND OR运算符:AND 和 OR 运算符用于编译多个条件来缩小在 SQLite 语句中所选数据。这两个运算符被称为连接运算符。...可以使用带有 WHERE 子句 DELETE 查询来删除选定行,否则所有的记录都会被删除。...(1)重要知识:HAVING 子句SELECT 查询中位置: SELECT FROM WHERE GROUP BY HAVING ORDER BY (2)基本语法:HAVING 子句必须放在 GROUP...: select * from company group by name having count(NAME) < 2; -- 显示名称计数等于 2 所有记录: select * from company

    2K70

    Oracle学习笔记_05_分组函数

    (2) 带有expr参数函数数据类型可以为CHAR,VARCHAR2,NUMBER,DATE.          (3) 所有分组函数都忽略空值。...(1)/count(2)/count(*)表示将表中每条记录用1/2/*来充当 select count(employee_id),count(1),count(2),count(salary),count...相等 二.group by   使用GROUP BY 子句可以将表中行分成更小组,然后使用分组函数返回每一组汇总信息。...] --即为对哪些列进行分组 [ORDER BY column]; 注: (1)SELECT 中出现列,如果未出现在分组函数中,则GROUP BY子句必须包含这些列         (2...)WHERE 子句可以某些行在分组之前排除在外        (3)不能在GROUP BY 中使用列别名        (4) 默认情况下GROUP BY列表中列按升序排列        (5) GROUP

    1.1K20
    领券