繁体   English   中英

Oracle SQL-订单表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM