必须满足如下条件的报亭,才能被选择:
2667和48632的平均net_sold_qty大于2(两个都大于2) 1107的平均net_sold_qty大于5
建表语句:
-
CREATE TABLE Titles
-
(product_id INTEGER NOT NULL PRIMARY KEY,
-
magazine_sku INTEGER NOT NULL,
-
issn INTEGER NOT NULL,
-
issn_year INTEGER NOT NULL);
-
CREATE TABLE Newsstands
-
(stand_nbr INTEGER NOT NULL PRIMARY KEY,
-
stand_name CHAR(20) NOT NULL);
-
CREATE TABLE Sales
-
(product_id INTEGER NOT NULL REFERENCES Titles(product_id),
-
stand_nbr INTEGER NOT NULL /*REFERENCES Newsstands(stand_nbr)*/,
-
net_sold_qty INTEGER NOT NULL,
-
PRIMARY KEY(product_id, stand_nbr));
-
-
INSERT INTO titles
-
SELECT 1,12345,1,2006 FROM dual UNION ALL
-
SELECT 2,2667,1,2006 FROM dual UNION ALL
-
SELECT 3,48632,1,2006 FROM dual UNION ALL
-
SELECT 4,1107,1,2006 FROM dual UNION ALL
-
SELECT 5,12345,2,2006 FROM dual UNION ALL
-
SELECT 6,2667,2,2006 FROM dual UNION ALL
-
SELECT 7,48632,2,2006 FROM dual UNION ALL
-
SELECT 8,1107,2,2006 FROM dual;
-
-
INSERT INTO sales
-
SELECT 1,1,1 FROM dual UNION ALL
-
SELECT 2,1,4 FROM dual UNION ALL
-
SELECT 3,1,1 FROM dual UNION ALL
-
SELECT 4,1,1 FROM dual UNION ALL
-
SELECT 5,1,1 FROM dual UNION ALL
-
SELECT 6,1,2 FROM dual UNION ALL
-
SELECT 7,1,1 FROM dual UNION ALL
-
-
SELECT 4,2,5 FROM dual UNION ALL
-
SELECT 8,2,6 FROM dual UNION ALL
-
SELECT 3,2,1 FROM dual UNION ALL
-
-
SELECT 1,3,1 FROM dual UNION ALL
-
SELECT 2,3,3 FROM dual UNION ALL
-
SELECT 4,3,1 FROM dual UNION ALL
-
SELECT 5,3,1 FROM dual UNION ALL
-
SELECT 6,3,3 FROM dual UNION ALL
-
SELECT 7,3,3 FROM dual UNION ALL
-
-
SELECT 1,4,1 FROM dual UNION ALL
-
SELECT 2,4,1 FROM dual UNION ALL
-
SELECT 3,4,4 FROM dual UNION ALL
-
SELECT 4,4,1 FROM dual UNION ALL
-
SELECT 5,4,1 FROM dual UNION ALL
-
SELECT 6,4,1 FROM dual UNION ALL
-
SELECT 7,4,2 FROM dual;
-
-
INSERT INTO Newsstands
-
SELECT DISTINCT stand_nbr,stand_nbr
-
FROM sales;
1、将行结果转换成列结果避免在where里面写多个子查询的方法:
-
select *
-
from (select B.stand_name,
-
sum(nvl(B.s1, 0)) as s1,
-
sum(nvl(B.s2, 0)) as s2,
-
sum(nvl(B.s3, 0)) as s3
-
from (select A.stand_name,
-
(case A.magazine_sku
-
when 1107 then
-
A.avg_sj
-
end) as s1,
-
(case A.magazine_sku
-
when 48632 then
-
A.avg_sj
-
end) as s2,
-
(case A.magazine_sku
-
when 2667 then
-
A.avg_sj
-
end) as s3
-
from (select ns.stand_name,
-
tt.magazine_sku,
-
avg(ss.net_sold_qty) as avg_sj
-
from sales ss, titles tt, newsstands ns
-
where ns.stand_nbr = ss.stand_nbr
-
and tt.product_id = ss.product_id
-
and tt.magazine_sku in (2667, 48632, 1107)
-
group by ns.stand_name, tt.magazine_sku
-
order by ns.stand_name) A) B
-
group by B.stand_name)
-
where s1 > 5
-
or (s2 > 2 and s3 > 2)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29507357/viewspace-1203730/
,如需转载,请注明出处,否则将追究法律责任。