2013-11-21 196 views
0

這些都是創建的表,我有工作:SQL SELECT語句查詢

create table Customer2 (cid char(3), cname char(10), primary key (Cid)); 

create table Employee2 
(
    eid char(3), ename char(10), salary number(7,2), 
    mid char(3), 
    primary key (eid), foreign key (mid) references Employee2 
); 

create table ArtObject2 
(
     aoid char(3), atitle char(12), artist varchar(10), pricea number(8,2), 
     primary key (aoid) 
); 

create table MakesD2 
(
    aoid char(3), eid char(3), cid char(3), prices number, dates date, 
    primary key (aoid, CID), 
    foreign key (aoid) references ArtObject2, 
    foreign key (CID) references Customer2, 
    foreign key (eid) references Employee2 
); 

我需要寫下面的SQL語句:

  1. 找到誰買的最多的客戶的名字畫。
  2. 找到誰買的客戶超過一幅畫後,1-JUL-12
  3. 對於繪畫的每幅畫賣出顯示標題,由客戶 字,「高於平均水平」支付,如果這幅畫的價格以低於平均要價的價格銷售,以及如果以低於平均要價的價格出售該作品,則以「低於平均」的字樣出售。對於持有「要求高於 」或「低於要求」等字的列製作標題備註。

我想這種說法對#1,但沒有奏效:

select cname 
from customer2 
where cid in 
     (select cid 
     from makesd2 
     where prices >=ALL(select prices from makesd2 group by cname) 
    ); 

我想這個語句#2,但沒有返回的所有結果:

select cname 
from customer2 
where cid in 
     (select cid 
     from makesd2 
     where dates > '1-JUL-12' 
     group by cid 
     having count(cid) > 1); 

任何幫助將是讚賞。由於

+0

這是你的家庭作業嗎? – Zane

回答

0

1:你必須做一個子查詢來獲取每個顧客買畫的數量和的customer2表連接,以獲得客戶的姓名:

SELECT c.cname 
FROM Customer2 c 
INNER JOIN (
    SELECT cid, 
    COUNT(*) AS bought 
    FROM makesd2 
    GROUP BY cid 
) m ON m.cid = c.cid 
ORDER BY m.bought 

2:同上,但在這一個,你會發現什麼是自該日起即買了一幅畫的CID的:

SELECT c.cname 
FROM Customer2 c 
INNER JOIN (
    SELECT cid, 
    COUNT(*) AS bought 
    FROM makesd2 
    WHERE dates > '1-JUL-12' 
    GROUP BY cid 
    HAVING COUNT(*) > 1 
) m ON m.cid = c.cid 

3:這是一個簡單的用例:

SELECT a.atitle, 
    m.prices, 
    CASE 
    WHEN m.aprice > (SELECT AVG(prices) FROM MakesD2) 
     THEN 'Higher than average' 
    ELSE 'Lower than average' 
    END AS averageRating 
FROM MakesD2 m 
INNER JOIN ArtObject2 a ON a.aoid = m.aoid