標籤: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 條件