[英]Oracle SQL - order table
我是Oracle SQL的新手,下面有一張表格。
TABLE NAME : ORDERS
CNUM AMT SNUM
1001 1000 2001
1002 2000 2002
1001 1500 2001
1001 500 2001
僅需要從上表中獲取cnum(客戶編號)由3 snum(銷售人員)提供服務的那些數據
謝謝你阿西特
這樣的東西?
select cnum, count(*), sum(amount)
from orders
group by cnum
having count(*) > 3
不確定您需要什么-匯總結果或每一行。 如果需要每一行,請嘗試以下一行:
select * from (
select a.*, count(*) over(partition by cnum) cnt
from orders a
)
where cnt > 3
您可以使用分析功能ROW_NUMBER 。
例如,
SQL> WITH DATA AS(
2 SELECT t.*, row_number() OVER(PARTITION BY cnum ORDER BY snum) rn FROM t
3 )
4 SELECT cnum, amt, snum FROM DATA
5 WHERE rn >=3;
CNUM AMT SNUM
---------- ---------- ----------
1001 1500 2001
SQL>
根據您的樣本數據,以上給出的結果包括cnum的3 snum,如果要大於3,則將>=
替換為>
。
WITH tab
AS (SELECT 1001 CNUM, 1000 AMT, 2001 SNUM FROM DUAL
UNION ALL
SELECT 1002, 2000, 2002 FROM DUAL
UNION ALL
SELECT 1001, 1500, 2001 FROM DUAL
UNION ALL
SELECT 1001, 500, 2001 FROM DUAL)
SELECT cnum
FROM tab
GROUP BY cnum
HAVING COUNT (*) >= 3;
如果只需要cnum和snum,則可以執行以下女巫,部分取自Rusty的答案:
WITH tab
AS (SELECT 1001 CNUM, 1000 AMT, 2001 SNUM FROM DUAL
UNION ALL
SELECT 1002, 2000, 2002 FROM DUAL
UNION ALL
SELECT 1001, 1500, 2001 FROM DUAL
UNION ALL
SELECT 1001, 500, 2001 FROM DUAL)
SELECT DISTINCT cnum, snum
FROM (SELECT cnum, snum, COUNT (*) OVER (PARTITION BY cnum) RANK FROM tab)
WHERE RANK >= 3;
您可以對不同的SNUM
進行分組和計數:
select CNUM
from ORDERS
group by CNUM
having count(distinct SNUM) > 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.