有以下一個表:programmer
id??????? name??????adresss
1???????? xc??????????cn
2???????? xc??????????ae
2???????? xc???????????rr
現在我要計算總條數,用count, select count(*) as acount from programmer,這條語句返回3。
因為這條語句count(*)是計算的所有的字段,而我現在這樣一個要求,就是說寫一條sql語句count id和name 兩個字段,并去掉重復記錄,就是說我查詢id和name兩個字段,去掉重復記錄并返回記錄的條數。
想了很多辦法都沒成功,網上有這么一條語句:select count(distinct 'id&name') as acount from programmer ,從語句上看好像符合了我的要求,但是這條sql語句返回的卻是1 ,而不是2 ,不知到為什么,還向各位請教。有什么其他的辦法嗎??急等
評論
distinct作用是去掉重復數據.
例如:表 A 數據如下
1 xc cn
1 xc cn
2 xc cn
2 xc cn
3 xc cn
3 xc cn
4 xc cn
4 xc cn
4 xc cn
select distinct * from A;
得出的結論就是
1 xc cn
2 xc cn
3 xc cn
4 xc cn
這樣明白吧??
例如:表 A 數據如下
1 xc cn
1 xc cn
2 xc cn
2 xc cn
3 xc cn
3 xc cn
4 xc cn
4 xc cn
4 xc cn
select distinct * from A;
得出的結論就是
1 xc cn
2 xc cn
3 xc cn
4 xc cn
這樣明白吧??
謝謝你的回復,這個我明白,但我還有疑問,可能仁兄沒有看懂我的意思。
表A,數據如下
1 xc cn
1 xc ae
1 xc cn
2 dd cn
select distinct * from A;
返回
1 xc cn
1 xc ae
2 dd cn
select dinstinct id,name from A;
返回
1 xc cn
2 dd cn
這些我都知道。而現在我想要的是寫一條sql語句,計算返回符合要求的數據庫record的條數,就是(如以上的數據)我要dinstinct id 和name 兩個字段,并且返回數據2。
select count(distinct 'id&name') as acount from A 返回的值為2。呵呵
表A,數據如下
1 xc cn
1 xc ae
1 xc cn
2 dd cn
select distinct * from A;
返回
1 xc cn
1 xc ae
2 dd cn
select dinstinct id,name from A;
返回
1 xc cn
2 dd cn
這些我都知道。而現在我想要的是寫一條sql語句,計算返回符合要求的數據庫record的條數,就是(如以上的數據)我要dinstinct id 和name 兩個字段,并且返回數據2。
select count(distinct 'id&name') as acount from A 返回的值為2。呵呵
select count(distinct id||name) as count from a
謝了,可以成功執行。可我原本的問題比這復雜,我一個聯合查詢語句如下:
SELECT count(distinct A.C_MAIN_REF || A.C_UNIT_CODE || A.C_TRX_STATUS) as counter
FROM TRX_AUTH_LIST A ,TRX_MATRIX_LIST B WHERE A.C_MAIN_REF = 'xcblcx'
AND A.C_MAIN_REF = B.C_MAIN_REF
這條語句能成功執行,而下面這條語句卻不行:
SELECT count(distinct A.C_MAIN_REF || A.C_UNIT_CODE || A.C_TRX_STATUS || A.I_AUTH_LEVEL) as counter
FROM TRX_AUTH_LIST A ,TRX_MATRIX_LIST B WHERE A.C_MAIN_REF = 'xcblcx'
AND A.C_MAIN_REF = B.C_MAIN_REF
差別在于加了一個A.I_AUTH_LEVEL的字段,此字段為integer類型,就不能成功,如果換一個字段為charactor的就可以。
難道查詢字段也有區別?望指點
SELECT count(distinct A.C_MAIN_REF || A.C_UNIT_CODE || A.C_TRX_STATUS) as counter
FROM TRX_AUTH_LIST A ,TRX_MATRIX_LIST B WHERE A.C_MAIN_REF = 'xcblcx'
AND A.C_MAIN_REF = B.C_MAIN_REF
這條語句能成功執行,而下面這條語句卻不行:
SELECT count(distinct A.C_MAIN_REF || A.C_UNIT_CODE || A.C_TRX_STATUS || A.I_AUTH_LEVEL) as counter
FROM TRX_AUTH_LIST A ,TRX_MATRIX_LIST B WHERE A.C_MAIN_REF = 'xcblcx'
AND A.C_MAIN_REF = B.C_MAIN_REF
差別在于加了一個A.I_AUTH_LEVEL的字段,此字段為integer類型,就不能成功,如果換一個字段為charactor的就可以。
難道查詢字段也有區別?望指點
我的意思是:如果有以下兩條語句
語句一:SELECT count(distinct A.C_MAIN_REF || A.C_UNIT_CODE || A.C_TRX_STATUS || A.I_AUTH_LEVEL) as counter
FROM TRX_AUTH_LIST A ,TRX_MATRIX_LIST B WHERE A.C_MAIN_REF = 'xcblcx'
AND A.C_MAIN_REF = B.C_MAIN_REF
語句二:SELECT count(distinct A.C_MAIN_REF || A.C_UNIT_CODE || A.C_TRX_STATUS || A.C_USER_ID) as counter
FROM TRX_AUTH_LIST A ,TRX_MATRIX_LIST B WHERE A.C_MAIN_REF = 'xcblcx'
AND A.C_MAIN_REF = B.C_MAIN_REF
第一條語句能成功執行,而第二條則會報錯。兩條語句的差別在于count函數的內部最后一個字段,(語句一:|| A.I_AUTH_LEVEL 語句二:|| A.C_USER_ID),I_AUTH_LEVEL 為integer,而C_USER_ID為charactor,我所能找到的差別就在此,我就問為什么語句二為什么不能執行成功,難道字段類型也有影響??
語句一:SELECT count(distinct A.C_MAIN_REF || A.C_UNIT_CODE || A.C_TRX_STATUS || A.I_AUTH_LEVEL) as counter
FROM TRX_AUTH_LIST A ,TRX_MATRIX_LIST B WHERE A.C_MAIN_REF = 'xcblcx'
AND A.C_MAIN_REF = B.C_MAIN_REF
語句二:SELECT count(distinct A.C_MAIN_REF || A.C_UNIT_CODE || A.C_TRX_STATUS || A.C_USER_ID) as counter
FROM TRX_AUTH_LIST A ,TRX_MATRIX_LIST B WHERE A.C_MAIN_REF = 'xcblcx'
AND A.C_MAIN_REF = B.C_MAIN_REF
第一條語句能成功執行,而第二條則會報錯。兩條語句的差別在于count函數的內部最后一個字段,(語句一:|| A.I_AUTH_LEVEL 語句二:|| A.C_USER_ID),I_AUTH_LEVEL 為integer,而C_USER_ID為charactor,我所能找到的差別就在此,我就問為什么語句二為什么不能執行成功,難道字段類型也有影響??
只有注冊用戶登錄后才能發表評論。 | ||
![]() |
||
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關文章:
|
||