Oracle in 貪婪匹配 與 group by 條件

來源:互聯網
上載者:User

標籤:des   cWeb   io   os   ar   使用   for   sp   div   

被問到一面試題

不假思索地寫了個sql

針對這道題目來講查詢結果是正確的,但是想到可能存在一種parentID的top clickNum與另一種parentID非 top clickNum相同的情況這樣查詢結果會包含這 【另一種parentID非 top clickNum】 實踐了下: 表建立create table productInfo (
productID int,productName varchar2(255),parentID int,clickNum int);初始化表資訊
insert into productInfo (productID,productName,parentID,clickNum) values (1,‘男士衣服‘,1,90);
insert into productInfo (productID,productName,parentID,clickNum) values (2,‘女士衣服‘,1,80);
insert into productInfo (productID,productName,parentID,clickNum) values (3,‘男士褲子‘,2,70);
insert into productInfo (productID,productName,parentID,clickNum) values (4,‘女士褲子‘,2,90);
insert into productInfo (productID,productName,parentID,clickNum) values (5,‘男士帽子‘,5,15);
insert into productInfo (productID,productName,parentID,clickNum) values (6,‘女士帽子‘,5,30);
insert into productInfo (productID,productName,parentID,clickNum) values (7,‘男士鞋子‘,10,65);
insert into productInfo (productID,productName,parentID,clickNum) values (8,‘女士鞋子‘,10,52);
insert into productInfo (productID,productName,parentID,clickNum) values (9,‘女士鞋子1‘,10,54);查詢表資訊select * from productInfo;
該題目SQLselect * from productinfo where clicknum in (select max(clickNum) from productinfo group by parentid) order by clicknum desc;結果   這樣看來是正確的  新增一條特殊的記錄 insert into productInfo (productID,productName,parentID,clickNum) values (10,‘女士鞋子1‘,10,30);
重新查詢 select * from productinfo where clicknum in (select max(clickNum) from productinfo group by parentid) order by clicknum desc;結果 這條記錄是不應該出現的   使用 in 貪婪匹配重新查詢select * from productinfo where (clickNum,parentID) in (select max(clickNum),parentID from productinfo group by parentid) order by clicknum desc
結果這樣就去除了 parentID的top clickNum與另一種parentID非 top clickNum相同的特殊情況  過程中的發現:使用 group by 時select max(clickNum),parentID from productinfo group by parentidclickNum並未在group by集合中是可以的 去掉max(),報錯  即使用group by 時 select 內容  可以是 group by 子集 + 彙總函式 max(),sum(),arv(),count() 等···  

Oracle in 貪婪匹配 與 group by 條件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.