电竞比分网-中国电竞赛事及体育赛事平台

分享

sql不重復的查找統(tǒng)計數(shù)據(jù)(經(jīng)典)

 厚怡 2021-09-24

例表如下:

表名:MYTEST

TID    COL1    COL2     COL3

1           1           A            A
2           1           A            A
3           2           A            A
4           2           B            A
5           3           B            B
6           3           B            B
7           4           C            B
8           4           C            B
9           1           A            A
10         2           B            A

1查找表中的一個字段,重復的只找一個:

SELECT DISTINCT COL1 FROM MYTEST;

2查找表中的多個字段,其中某個字段不重復:

SELECT * FROM MYTEST WHERE rowid IN (SELECT    min(rowid) FROM MYTEST GROUP BY COL1);

重點:select * from 表 where 列ID in (select min(列id) from 表 group by 不想重復的列名)

結果為:
1           1           A            A
3           2           A            A
5           3           B            B
7           4           C            B

其中rowid為oracle中的虛擬column用來指向表中一個row的存放地址,改為其它的不能運行(這樣理解不知對不對?哪位朋友有更好的理解請給我留言)

min方法若改為max時結果如下:
6          3          B          B
8          4          C          B
9          1          A          A
10        2          B          A

3查詢并統(tǒng)計該字段的數(shù)量

SELECT COL1,COUNT(COL1) FROM MYTEST GROUP BY COL1;

結果為:
1          3
2          3
3          2
4          2

GROUP BY 哪個字段只能查找哪個字段和該字段的數(shù)量若要同時搜索其它字段就報錯
即:
語句若改成    SELECT COUNT(COL1) FROM MYTEST GROUP BY COL1;
或    SELECT COL1,COL2,COUNT(COL1) FROM MYTEST GROUP BY COL1;就會報錯

原因可能是:搜索的結果是一組組的數(shù)據(jù)在每一組數(shù)據(jù)中,COL2有很多,所以不能搜索出唯一的一個值(這樣理解不知對不對?哪位朋友有更好的理解請給我留言)

4從兩個表中查詢并統(tǒng)計數(shù)據(jù)

表T_OVERTIME字段
int tid = 0;//加班代碼
float days = 0;//工日數(shù)

表T_OVERTIMEPERSONNEL字段
int tid = 0;//加班人員代碼
int overtimeid = 0;//加班代碼
int userid=0;//用戶ID

統(tǒng)計每個用戶的加班工日數(shù)
SELECT b.userid,SUM(a.days) FROM T_OVERTIME a,T_OVERTIMEPERSONNEL b WHERE a.tid=b.overtimeid GROUP BY b.userid

5按多個字段分組并統(tǒng)計

SELECT COL1, COL2, COUNT(*) AS Expr1
FROM mytest
GROUP BY COL1, COL2

結果為:

COL1    COL2    COUNT

     1           A           3
     2           A           1
     2          B           2
     3           B           2
     4           C           2
即按COL1, COL2分組后COL1, COL2的內(nèi)容和每組中記錄的數(shù)量

若:SELECT COL1, COL2, COUNT(DISTINCT COL3) AS Expr1
FROM mytest
GROUP BY COL1, COL2

結果為:
COL1    COL2    COUNT
     1           A           1
     2           A           1
     2          B           1
     3           B           1
     4           C           1
若將第7條記錄改為 7           4           C           C
則結果為:
COL1    COL2    COUNT
     1           A           1
     2           A           1
     2          B           1
     3           B           1
     4           C           2
即按COL1, COL2分組后COL1, COL2的內(nèi)容和每組中COL3不重復的記錄數(shù)

http://post.blog.hexun.com/wolffery/trackback.aspx?articleid=18946781&key=633458003799400000本文章尚未被引用

例表如下:

表名:MYTEST

TID    COL1    COL2     COL3

1           1           A            A
2           1           A            A
3           2           A            A
4           2           B            A
5           3           B            B
6           3           B            B
7           4           C            B
8           4           C            B
9           1           A            A
10         2           B            A

1查找表中的一個字段,重復的只找一個:

SELECT DISTINCT COL1 FROM MYTEST;

2查找表中的多個字段,其中某個字段不重復:

SELECT * FROM MYTEST WHERE rowid IN (SELECT    min(rowid) FROM MYTEST GROUP BY COL1);

結果為:
1           1           A            A
3           2           A            A
5           3           B            B
7           4           C            B

其中rowid為oracle中的虛擬column用來指向表中一個row的存放地址,改為其它的不能運行(這樣理解不知對不對?哪位朋友有更好的理解請給我留言)

min方法若改為max時結果如下:
6          3          B          B
8          4          C          B
9          1          A          A
10        2          B          A

3查詢并統(tǒng)計該字段的數(shù)量

SELECT COL1,COUNT(COL1) FROM MYTEST GROUP BY COL1;

結果為:
1          3
2          3
3          2
4          2

GROUP BY 哪個字段只能查找哪個字段和該字段的數(shù)量若要同時搜索其它字段就報錯
即:
語句若改成    SELECT COUNT(COL1) FROM MYTEST GROUP BY COL1;
或    SELECT COL1,COL2,COUNT(COL1) FROM MYTEST GROUP BY COL1;就會報錯

原因可能是:搜索的結果是一組組的數(shù)據(jù)在每一組數(shù)據(jù)中,COL2有很多,所以不能搜索出唯一的一個值(這樣理解不知對不對?哪位朋友有更好的理解請給我留言)

4從兩個表中查詢并統(tǒng)計數(shù)據(jù)

表T_OVERTIME字段
int tid = 0;//加班代碼
float days = 0;//工日數(shù)

表T_OVERTIMEPERSONNEL字段
int tid = 0;//加班人員代碼
int overtimeid = 0;//加班代碼
int userid=0;//用戶ID

統(tǒng)計每個用戶的加班工日數(shù)
SELECT b.userid,SUM(a.days) FROM T_OVERTIME a,T_OVERTIMEPERSONNEL b WHERE a.tid=b.overtimeid GROUP BY b.userid

5按多個字段分組并統(tǒng)計

SELECT COL1, COL2, COUNT(*) AS Expr1
FROM mytest
GROUP BY COL1, COL2

結果為:

COL1    COL2    COUNT

     1           A           3
     2           A           1
     2          B           2
     3           B           2
     4           C           2
即按COL1, COL2分組后COL1, COL2的內(nèi)容和每組中記錄的數(shù)量

若:SELECT COL1, COL2, COUNT(DISTINCT COL3) AS Expr1
FROM mytest
GROUP BY COL1, COL2

結果為:
COL1    COL2    COUNT
     1           A           1
     2           A           1
     2          B           1
     3           B           1
     4           C           1
若將第7條記錄改為 7           4           C           C
則結果為:
COL1    COL2    COUNT
     1           A           1
     2           A           1
     2          B           1
     3           B           1
     4           C           2
即按COL1, COL2分組后COL1, COL2的內(nèi)容和每組中COL3不重復的記錄數(shù)

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多