为什么count()函数会出现空?

sjldkf 2019-04-28 04:40:29
select count(*) from table_name group by pk having count(*) > 1; 返回值为何为空,按照语意:先按主键分成组A,再找出组A中记录数大于1的元组的总行数。由于主键唯一,组A中不可能存在记录数大于1的元组。所以这条语录实际是查询一天不存在记录的记录数,难道不应该是0吗?为什么返回空。 另外,为什么我用where字句表达相似的语意就可以得到0。 select count(*) from table_name where instr(trim(pk),'空格')<>0;假设主键不包含空格
...全文
1723 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2019-10-31
  • 打赏
  • 举报
回复
这要不为空(0条结果),那就真是数据库的bug了。 楼主,认为应该是什么结果?大家帮你解惑。
卖水果的net 2019-10-31
  • 打赏
  • 举报
回复
这要不为空(0条结果),那就真是数据库的bug了。 楼主,认为应该是什么结果?大家帮你解惑。
stelf 2019-08-21
  • 打赏
  • 举报
回复
举两个栗子 select count(1) from dual where 1 <> 1 ; select count(1) from dual where 1 <> 1 group by 1 having count(1) > 1;
AHUA1001 2019-08-20
  • 打赏
  • 举报
回复
select count(*) from table_name 如果表里没有数据,返回0。 select count(*) from table_name group by pk 如果表里的pk字段统统为NULL,返回NULL。
  • 打赏
  • 举报
回复
主要是group by的原因,having的时候是按pk分组的,没有数据, 用where的时候是count(*)=0也是表示没有数据,你在where后面加个group by 分组,select count(*) from table_name where instr(trim(pk),'空格')<>0 group by pk;一样是空
IceIsabel 2019-06-27
  • 打赏
  • 举报
回复
按照主键分组count(*)>1结果集为空,所以count就是空
AHUA1001 2019-06-20
  • 打赏
  • 举报
回复
count(*) 可能是0,或者您这个表里,一条数据都没有。
GZY1123 2019-06-19
  • 打赏
  • 举报
回复
pk是主键 怎么可能大于1呢
卖水果的net 2019-06-14
  • 打赏
  • 举报
回复
楼主应该搞清楚两个的区别 having count(*) > 1; 是对结果的过滤 where 是对 源数据的过滤
小灰狼W 2019-06-13
  • 打赏
  • 举报
回复
一天不存在记录的记录数 这好像是个哲学问题
minsic78 2019-04-28
  • 打赏
  • 举报
回复
你这按照主键group by的,难道不是count(*)永远=1?主键永不为空且唯一

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧