簡體   English   中英

使用單個 SQL 查詢計算列中給定值列表的出現次數

[英]Count the occurrences of a given list of values in a column using a single SQL query

我想使用單個 SQL 查詢獲取列中給定值列表的出現次數。 必須針對性能優化操作。

請參考下面給出的例子,

示例表名稱 - 歷史

代碼列表
5lysgj
627czl
1lqnd8
627czl
dtrtvp
627czl
esdop9
esdop9
3by104
1lqnd8

預計 Output

需要以下面給出的格式獲取這些給定代碼列表 627czl、1lqnd8、esdop9、aol4m6 的出現次數。

代碼 數數
627czl 3個
esdop9 2個
1lqnd8 2個
aol4m6 0

我在下面顯示的方法中嘗試過,但每個輸入的計數都顯示為使用此查詢的新列,

SELECT 
    sum(case when h.code_list = 'esdop9' then 1 else 0 end) AS count_esdop9,
    sum(case when h.code_list = '627czl' then 1 else 0 end) AS count_627czl,
    sum(case when h.code_list = '1lqnd8' then 1 else 0 end) AS count_1lqnd8,
    sum(case when h.code_list = 'aol4m6' then 1 else 0 end) AS count_aol4m6
FROM history h;

注意 - 需要在 10 中的查詢中給出數字輸入,真實表也有數百萬條記錄。

如果我正確理解您需要獲取以下代碼的出現次數: 627czl1lqnd8esdop9

在這種情況下,您可以試試這個:

SELECT code_list, count(*) as count_
  FROM history
 WHERE code_list in ('627czl','1lqnd8','esdop9')
 GROUP BY code_list
 ORDER BY count_ DESC;

小提琴手

如果您需要獲取所有代碼的出現次數,您可以運行以下查詢:

SELECT code_list, count(*) as count_
  FROM history
 GROUP BY code_list
 ORDER BY count_ DESC;

你可以嘗試使用 GROUP BY Something like this

SELECT code_list, COUNT(1) as 'total' ROM h GROUP by code_list order by 'total' ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM