亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

帶條件的分組統計count里面怎么寫??

2024-05-30 08:45:34
5
0

1.需求

現在需要統計每個id出現指定幾種scode的次數;

例:需要統計每個id出現12001,13001,15001出現的次數:

源數據表如下(table_01):

id scode
001 12001
001 15001
002 13001
002 12001
001 12001
001 13001
002 13001
003 18001

需要產出的表如下(table_01):

id cnt_12001 cnt_13001 cnt_15001
001 2 0 1
002 1 2 1

2.實現方式

首先肯定會想到一種"原生態"的方式:

  1. SELECT id

  2. ,COUNT(1) cnt_12001

  3. FROM table_01

  4. WHERE scode = 12001

  5. GROUP BY id;

先將每種scode的數據選出來,一個一個的統計次數,然后再把這幾種scode的統計結果按照id join起來,形成一張完整的表.這種方式適用需要統計的scode的種類少的情況,當scode種類有五六七八種的時候這種一個一個去join的方式會讓人抓狂的,所以就需要下面這種方式.

  1. SELECT id

  2. ,sum(CASE WHEN scode=12001 THEN 1 ELSE 0 END) cnt_12001

  3. ,sum(CASE WHEN scode=13001 THEN 1 ELSE 0 END) cnt_13001

  4. ,sum(CASE WHEN scode=15001 THEN 1 ELSE 0 END) cnt_15001

  5. FROM table_01

  6. WHERE scode IN (12001,13001,15001 )

  7. GROUP BY id;

這種方式可以將條件下載sum里面,判斷好以后再加和,實現了帶條件count的功能.

得到table_2:

id cnt_12001 cnt_13001 cnt_15001
001 2 0 1
002 1 2 1

到這里又有人說了,這樣的話where條件里面是不是不用寫scode的條件了呢?

當where條件中不寫scode的條件時,這時id為003的這條信息才會出現

id cnt_12001 cnt_13001 cnt_15001
001 2 0 1
002 1 2 1
003 0 0 0

因為003沒有這幾種scode的數據,所以id003的統計結果全為0;

當然這里sum換成count也行,那么在count中需要填入什么條件呢?

我們評論見!

0條評論
0 / 1000
呂****偉
2文章數
0粉絲數
呂****偉
2 文章 | 0 粉絲
呂****偉
2文章數
0粉絲數
呂****偉
2 文章 | 0 粉絲
原創

帶條件的分組統計count里面怎么寫??

2024-05-30 08:45:34
5
0

1.需求

現在需要統計每個id出現指定幾種scode的次數;

例:需要統計每個id出現12001,13001,15001出現的次數:

源數據表如下(table_01):

id scode
001 12001
001 15001
002 13001
002 12001
001 12001
001 13001
002 13001
003 18001

需要產出的表如下(table_01):

id cnt_12001 cnt_13001 cnt_15001
001 2 0 1
002 1 2 1

2.實現方式

首先肯定會想到一種"原生態"的方式:

  1. SELECT id

  2. ,COUNT(1) cnt_12001

  3. FROM table_01

  4. WHERE scode = 12001

  5. GROUP BY id;

先將每種scode的數據選出來,一個一個的統計次數,然后再把這幾種scode的統計結果按照id join起來,形成一張完整的表.這種方式適用需要統計的scode的種類少的情況,當scode種類有五六七八種的時候這種一個一個去join的方式會讓人抓狂的,所以就需要下面這種方式.

  1. SELECT id

  2. ,sum(CASE WHEN scode=12001 THEN 1 ELSE 0 END) cnt_12001

  3. ,sum(CASE WHEN scode=13001 THEN 1 ELSE 0 END) cnt_13001

  4. ,sum(CASE WHEN scode=15001 THEN 1 ELSE 0 END) cnt_15001

  5. FROM table_01

  6. WHERE scode IN (12001,13001,15001 )

  7. GROUP BY id;

這種方式可以將條件下載sum里面,判斷好以后再加和,實現了帶條件count的功能.

得到table_2:

id cnt_12001 cnt_13001 cnt_15001
001 2 0 1
002 1 2 1

到這里又有人說了,這樣的話where條件里面是不是不用寫scode的條件了呢?

當where條件中不寫scode的條件時,這時id為003的這條信息才會出現

id cnt_12001 cnt_13001 cnt_15001
001 2 0 1
002 1 2 1
003 0 0 0

因為003沒有這幾種scode的數據,所以id003的統計結果全為0;

當然這里sum換成count也行,那么在count中需要填入什么條件呢?

我們評論見!

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0