为了账号安全,请及时绑定邮箱和手机立即绑定

你好,需要用sql处理数据,比如count( )函数?该怎么做?

你好,需要用sql处理数据,比如count( )函数?该怎么做?

qq_笑_17 2021-07-15 21:11:02
我有一个c表,里面有两列,我想对于第一列的每一个元素在第二列里出现的次数进行记录,不过我有点看不懂,谁能帮我解释一下?select col001,(select count(1) from c t1 where t1.col002=t.col001)from c t;我主要不明白的地方:1.什么时候才可以用表明.列名。2.count(1),那个1是什么意思,为什么不count(col002) 0? 3 t1.col002=t.col001 为什么一个用t1一个用t?我以前想用group by这是我写的 SELECT COL001,COUNT(COL002) FROM C WHERE COL002=COL001GROUP BY COL001 和刚才那个程序具体差别在哪里呢?哪位大侠给我看看?
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

count(1)是每个记录计数1次
count(col002)是每个col002不为NULL的记录计数1次
一个用t1、一个用t
别名为啥要一样?就是要不一样啊
你写的这个sql不也是对的吗?实际我觉得你这个效率应该更好点

查看完整回答
反对 回复 2021-07-18
?
FFIVE

TA贡献1797条经验 获得超6个赞

你写的意思是,c表中2个字段相等的记录数中 ,col001的个数
而上面那个语句是第一列的每一个元素在第二列里出现的次数进行记录
下面的例子很显然说明了这2者的差异
create table c
(
col001 int,
col002 int
);

insert into c
select 1,2 from dual
union all select 1,2 from dual
union all select 1,2 from dual
union all select 1,2 from dual
union all select 1,2 from dual
union all select 1,2 from dual
union all select 2,1 from dual
union all select 2,1 from dual
union all select 2,1 from dual
union all select 2,1 from dual
union all select 2,1 from dual
;
commit;

select distinct col001,(select count(1) from c t1 where t1.col002=t.col001)
from c t;
SELECT COL001,COUNT(COL002) FROM C WHERE COL002=COL001
GROUP BY COL001



查看完整回答
反对 回复 2021-07-18
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

1.只要是表或表别名都可以用表名.列名。一般是为了方便。
2.count(1) 中的1没有意思,只是统计行数,用COL002也可以。
3.t1 是括号里的表C 的别名,t是括号外表C的别名。

两个是有差别的,上一个显示表C中的所有记录,而你自己 写的语句可以统计每个第一列出现的次数。如果第一个语句是你想要的,还有一个更简单一些的语句:
select coloo1,count(col002) over(partition by col001) from c order by 排序列 不过个会再次排序。需要你有个排序列。这个还可以只统计排在前面的次数。

查看完整回答
反对 回复 2021-07-18
  • 3 回答
  • 0 关注
  • 334 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信