![](/img/trans.png)
[英]Oracle / SQL - Count number of occurrences of values in a single column
[英]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 中的查詢中給出數字輸入,真實表也有數百萬條記錄。
如果我正確理解您需要獲取以下代碼的出現次數: 627czl
、 1lqnd8
、 esdop9
。
在這種情況下,您可以試試這個:
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.