Oracle 表的分組操作

來源:互聯網
上載者:User

標籤:

需求:

1.查出每組的前幾條資料;

2.查出每組資料條數滿足一定數目的資料;

 

資料庫建表以及插入資料sql如下

CREATE TABLE request (  buyer_company_name varchar(100),  buyer_com_id int,  buyer_com_country varchar(200),  subject varchar(200));INSERT INTO request VALUES (‘Media101‘, 1001, ‘Australia‘, ‘Australia_1‘);INSERT INTO request VALUES (‘Media101‘, 1001, ‘Australia‘, ‘Australia_2‘);INSERT INTO request VALUES (‘Media101‘, 1001, ‘Australia‘, ‘Australia_3‘);INSERT INTO request VALUES (‘Media102‘, 1002, ‘Australia‘, ‘Australia_1‘);INSERT INTO request VALUES (‘Media102‘, 1002, ‘Australia‘, ‘Australia_2‘);INSERT INTO request VALUES (‘Media102‘, 1002, ‘Australia‘, ‘Australia_3‘);INSERT INTO request VALUES (‘Media103‘, 1003, ‘Australia‘, ‘Australia_1‘);INSERT INTO request VALUES (‘Media104‘, 1004, ‘Australia‘, ‘Australia_1‘);INSERT INTO request VALUES (‘Media105‘, 1005, ‘Australia‘, ‘Australia_1‘);INSERT INTO request VALUES (‘ali101‘, 1006, ‘India‘, ‘India_1‘);INSERT INTO request VALUES (‘ali102‘, 1007, ‘India‘, ‘India_1‘);INSERT INTO request VALUES (‘ali103‘, 1008, ‘India‘, ‘India_1‘);INSERT INTO request VALUES (‘ali103‘, 1008, ‘India‘, ‘India_2‘);INSERT INTO request VALUES (‘ali103‘, 1008, ‘India‘, ‘India_3‘);INSERT INTO request VALUES (‘ali103‘, 1008, ‘India‘, ‘India_4‘);INSERT INTO request VALUES (‘ali104‘, 1009, ‘India‘, ‘India_1‘);

 

具體:

1. 查詢出每個國家的2個公司

   一開始會這麼寫,這是有問題的,查詢出的結果會少於2個,即使加了distinct去重。不知道為什麼,忘知情者留言

select *  from request a where buyer_com_id in (select distinct buyer_com_id                          from request b                         where b.buyer_com_country = a.buyer_com_country                           and rownum <= 2)

結果:

正確的寫法如下:

select *  from request a where buyer_com_id in       (select buyer_com_id          from (select distinct buyer_com_id, buyer_com_country from request) b         where b.buyer_com_country = a.buyer_com_country           and rownum <= 2)

2.查詢出每個國家的發布資訊條數在2條以上的2個公司

有了以上的基礎,這個sql就很好寫了

select *  from request a where buyer_com_id in (select buyer_com_id                          from (select buyer_com_id, buyer_com_country                                  from request                                having count(*) > 2                                 group by buyer_com_country, buyer_com_id) b                         where b.buyer_com_country = a.buyer_com_country                           and rownum <= 2)

2.1 如果有個要求竟敢是: 查詢出每個國家的2個公司,再找出發布資訊條數在2條以上的

那隻能拿出這個醜陋的sql來了

select *  from request where buyer_com_id in       (select buyer_com_id          from request a         where buyer_com_id in               (select buyer_com_id                  from (select distinct buyer_com_id, buyer_com_country                          from request) b                 where b.buyer_com_country = a.buyer_com_country                   and rownum <= 2) having count(*) > 2         group by buyer_com_id)

結果為:

如果你有更簡潔的 或者不同的sql,可以實現相同的效果,歡迎留言

 

Oracle 表的分組操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.