Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нужен пинок / 15 сообщений из 15, страница 1 из 1
05.02.2014, 20:50
    #38551082
macnur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
Добрый день,

Я начал изучать SQL с недавних пор. Сейчас наткнулся на задачу и уже второй день никак не могу решить. Хотел бы получить подсказку в каком направлении продвигаться в решении этой задачи.

Задача заключается в следующем:
Для каждой нации в БД(NATION), найти имя наиболее закупаемой запчасти(из таблицы PARTKEY), где нация соответствует нации клиента(CUSTOMER -> NATIONKEY).


Схема БД в приложении.
...
Рейтинг: 0 / 0
05.02.2014, 21:00
    #38551092
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
Эта задача решается полудюжиной способов в зависимости от используемого SQL сервера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.02.2014, 21:01
    #38551093
Злой Бобр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
macnur,

Схема неотображается.
...
Рейтинг: 0 / 0
05.02.2014, 21:02
    #38551096
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
А если наиболее закупаемых частей (кстати как именно определяется наиболее закупаемая часть) будет более одной, то бишь две и более части будут иметь одинаковый объем продаж то какую выводить?
Картинку замените на скрипт создания таблиц, чтобы оттуда можно было скопировать/вставить названия полей и таблиц.
...
Рейтинг: 0 / 0
05.02.2014, 21:06
    #38551101
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
macnurХотел бы получить подсказку в каком направлении продвигаться в решении этой задачи.
Скорее всего, Вам стоит обратить внимание на групповые функции и выражение GROUP BY.
...
Рейтинг: 0 / 0
05.02.2014, 21:15
    #38551105
macnur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
Прошу прощения если рисунок не отображается.
Вот другая ссылка на рисунок.
https://www.dropbox.com/s/w0h6oxxm7ru69nk/БД.png
...
Рейтинг: 0 / 0
05.02.2014, 21:22
    #38551115
Злой Бобр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
macnur,

"из таблицы PARTKEY" - ну и где эта таблица?
...
Рейтинг: 0 / 0
05.02.2014, 22:41
    #38551192
macnur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
Задача заключается в следующем (обновлено):

Для каждой нации в БД(таблица NATION), найти имя наиболее закупаемой запчасти(из таблицы PART), где нация соответствует нации клиента(талбица CUSTOMER).
...
Рейтинг: 0 / 0
05.02.2014, 23:22
    #38551235
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
macnurЗадача заключается в следующем (обновлено):
Ответ не меняется. Выбирай что есть под рукой:
1) Подзапросы
2) Derived Tables
3) Аналитические функции
4) Процедурные расширения

Задача решается любым из этих инструментов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.02.2014, 00:11
    #38551259
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
1 создадим именованный набор данных
это может быть вьюха, СТЕ, или временная таблица не суть важно

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create view qqq
as 
select p.name as part_name,n.name as nation_name
count(*) as amount
from lineitem i
join orders o on i.orderkey=o.orderkey
join customer c on o.custkey=c.custkey
join nation n on n.nationkey=c.nationkey
join part p on p.partkey=i.partkey
group by p.name, n.name



Здесь в качестве самой закупаемой фунции будет count(*) хотя легко может быть sum(quantity) или sum(quantity*extendedprice) или sum(quantity*extendedprice - discount) или sum(quantity*extendedprice + tax - discount) короче как велит фантазия.

2 как видно qqq содержит все строки, а нам надо отфильтровать только максимальную для каждой нации
создам еще один поименованный набор данных
Код: sql
1.
2.
3.
4.
create view bbb as 
select nation_name,part_name,amount
from qqq q1
where amount=(select max(amount) from qqq q2 where q1.nation_name=q2.nation_name)



в случае если две запчасти имеют одинаковый amount они попадают в выборку обе, кроме того нации не имеющие закупок (какие-нибудь атланты) из нее исключены, чтобы побороться с этим можно применить скалярный подзапрос

3

Код: sql
1.
2.
3.
select name,
(select max(part_name) from bbb where nation_name=name)
from nation
...
Рейтинг: 0 / 0
06.02.2014, 02:57
    #38551324
macnur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
Dimitry Sibiryakov,

Spasibo Vam ogromnoe. Kak ia upomyanul ranee, ia tolko izuchaiu SQL i ne znakom s VIEW i temporary TABLE. Posle Vashego poiasneniya vse stalo na mnogo proshe.
...
Рейтинг: 0 / 0
06.02.2014, 10:51
    #38551513
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
macnur,

мужчина, я тебе уже ответил в ветке MySQL.

за это расскажи мне, какой олух дал тебе задание переписывать TPC-H ?
...
Рейтинг: 0 / 0
06.02.2014, 11:37
    #38551567
macnur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
MasterZiv,
pochemu vy vozmushetes'? Chto ne pravilnogo s etim TPC-H?
...
Рейтинг: 0 / 0
06.02.2014, 12:27
    #38551669
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
macnurMasterZiv,
pochemu vy vozmushetes'? Chto ne pravilnogo s etim TPC-H?виртуальной клавиатурой западло пользоваться, да?
...
Рейтинг: 0 / 0
06.02.2014, 22:25
    #38552586
macnur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужен пинок
egorych,
нет, исправился.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нужен пинок / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]