2013-11-21 7 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-июля-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: Вы должны сделать подзапрос, чтобы получить количество картин, купленных каждым клиентом и JOIN с 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: То же, что и выше, но в этом один, вы найдете какую Сиду которые купили более чем одну картины после этой даты:

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 
Смежные вопросы