3 回答
TA贡献1876条经验 获得超5个赞
count(1)是每个记录计数1次
count(col002)是每个col002不为NULL的记录计数1次
一个用t1、一个用t
别名为啥要一样?就是要不一样啊
你写的这个sql不也是对的吗?实际我觉得你这个效率应该更好点
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
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 排序列 不过个会再次排序。需要你有个排序列。这个还可以只统计排在前面的次数。
添加回答
举报