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 排序列 不過個會再次排序。需要你有個排序列。這個還可以只統計排在前面的次數。
添加回答
舉報