3 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個贊
count(1)是每個記錄計數(shù)1次
count(col002)是每個col002不為NULL的記錄計數(shù)1次
一個用t1、一個用t
別名為啥要一樣?就是要不一樣啊
你寫的這個sql不也是對的嗎?實(shí)際我覺得你這個效率應(yīng)該更好點(diǎn)

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個贊
你寫的意思是,c表中2個字段相等的記錄數(shù)中 ,col001的個數(shù)
而上面那個語句是第一列的每一個元素在第二列里出現(xiàn)的次數(shù)進(jìn)行記錄
下面的例子很顯然說明了這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貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個贊
1.只要是表或表別名都可以用表名.列名。一般是為了方便。
2.count(1) 中的1沒有意思,只是統(tǒng)計行數(shù),用COL002也可以。
3.t1 是括號里的表C 的別名,t是括號外表C的別名。
兩個是有差別的,上一個顯示表C中的所有記錄,而你自己 寫的語句可以統(tǒng)計每個第一列出現(xiàn)的次數(shù)。如果第一個語句是你想要的,還有一個更簡單一些的語句:
select coloo1,count(col002) over(partition by col001) from c order by 排序列 不過個會再次排序。需要你有個排序列。這個還可以只統(tǒng)計排在前面的次數(shù)。
添加回答
舉報