我需要列印區域 ID 和他持有的國家/地區的數量,但僅限于最高的國家/地區。
我的表是這樣的:
COUNTRY_ID COUNTRY_NAME REGION_ID
AR Argentina 2
AU Belgium 3
BE Brazil 1
BR Canada 2
CA Switzerland 2
CN China 1
DE Germany 3
結果必須是這樣的:
REGION_ID Quantity
2 3
uj5u.com熱心網友回復:
為此,您可以使用以下 sql。在按 REGION_ID 列分組后,我使用 row_number 分析函式對行進行排名。然后,我按 rnb = 1 過濾以獲得最大數量的行。
select REGION_ID, QUANTITY
from (
select t.REGION_ID, count(*)quantity, row_number()over(order by count(*) desc) rnb
from YourTable t
group by t.REGION_ID
)
where rnb = 1
演示
uj5u.com熱心網友回復:
從 Oracle 12c 開始,您可以使用:
SELECT region_id,
COUNT(*) AS quantity
FROM table_name
GROUP BY region_id
ORDER BY quantity DESC
FETCH FIRST ROW ONLY;
在那之前:
SELECT *
FROM (
SELECT REGION_ID,
COUNT(*) AS quantity
FROM table_name
GROUP BY region_id
ORDER BY quantity DESC
)
WHERE ROWNUM = 1;
其中,對于您的示例資料:
CREATE TABLE table_name (COUNTRY_ID, COUNTRY_NAME, REGION_ID) AS
SELECT 'AR', 'Argentina', 2 FROM DUAL UNION ALL
SELECT 'AU', 'Belgium', 3 FROM DUAL UNION ALL
SELECT 'BE', 'Brazil', 1 FROM DUAL UNION ALL
SELECT 'BR', 'Canada', 2 FROM DUAL UNION ALL
SELECT 'CA', 'Switzerland', 2 FROM DUAL UNION ALL
SELECT 'CN', 'China', 1 FROM DUAL UNION ALL
SELECT 'DE', 'Germany', 3 FROM DUAL;
兩個輸出:
REGION_ID 數量 2 3
db<>在這里擺弄
uj5u.com熱心網友回復:
在 Oracle 中,您可以嵌套聚合函式來計算group by結果的總數。所以你可以使用last聚合函式來獲得最高的 id:
select max(region_id) keep( dense_rank last /* region_id for highest count(*) calculated per region_id */ order by count(*) asc ) as region_id, max(count(*)) as quantity from table_name group by region_idREGION_ID | 數量 --------: | -------: 2 | 3
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/358088.html
上一篇:對深度層次結構的資料進行分組時如何處理SQL聚合函式
下一篇:帶有OR條件的SQL子查詢
