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

我有一个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=COL001
GROUP BY COL001 和刚才那个程序具体差别在哪里呢?
哪位大侠给我看看?

qq_笑_17
浏览 337回答 3
3回答

慕运维8079593

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

FFIVE

你写的意思是,c表中2个字段相等的记录数中 ,col001的个数而上面那个语句是第一列的每一个元素在第二列里出现的次数进行记录下面的例子很显然说明了这2者的差异create table c(col001 int,col002 int);insert into cselect 1,2 from dualunion all select 1,2 from dualunion all select 1,2 from dualunion all select 1,2 from dualunion all select 1,2 from dualunion all select 1,2 from dualunion all select 2,1 from dualunion all select 2,1 from dualunion all select 2,1 from dualunion all select 2,1 from dualunion 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=COL001GROUP BY COL001

芜湖不芜

1.只要是表或表别名都可以用表名.列名。一般是为了方便。2.count(1) 中的1没有意思,只是统计行数,用COL002也可以。3.t1 是括号里的表C 的别名,t是括号外表C的别名。两个是有差别的,上一个显示表C中的所有记录,而你自己 写的语句可以统计每个第一列出现的次数。如果第一个语句是你想要的,还有一个更简单一些的语句:select coloo1,count(col002) over(partition by col001) from c order by 排序列 不过个会再次排序。需要你有个排序列。这个还可以只统计排在前面的次数。
打开App,查看更多内容
随时随地看视频慕课网APP