2016-02-17 4 views
1

Я пытаюсь выполнить домашнее задание Oracle SQL, которое я, похоже, даже не понимаю ... Может ли кто-нибудь дать мне руку? Я не полный noob в SQL, но для меня это кажется слишком сложным для понимания.Запрос запроса на запрос Oracle - подсчет, сумма, упорядочивание, группа по

подсказка: Написать ЗЕЬЕСТ, который возвращает одну строку для каждого номера счета главной книги, которая содержит три колонки: Колонка account_description из таблицы General_Ledger_accounts графа записей в таблице Invoice_Line_Items, которые имеют тот же account_number Сумма суммы позиции в таблице Invoice_Line_Items, которая имеет тот же номер_источника . Фильтрация результирующего набора включает только те строки с числом больше 1; сгруппируйте результирующий набор с помощью Описание учетной записи (я предполагаю, что они имеют значение Account_Description); и сортировать результирующий набор в нисходящей последовательности на сумму суммы позиций.

детали Таблица:

SQL> desc general_ledger_accounts 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
ACCOUNT_NUMBER       NOT NULL NUMBER 
ACCOUNT_DESCRIPTION      NOT NULL VARCHAR2(50) 
+2

Можете ли вы показать нам ваш запрос к, который не работает? –

+0

На самом деле я даже не начал, потому что я понятия не имею, с чего начать. Я попросил одноклассника, который предоставил это, но он возвращает значение 61482 в столбце count (отдельный столбец invoice_line_items.account_number). выберите general_ledger_accounts.account_description, граф (DISTINCT invoice_line_items.account_number), сумма (invoice_line_items.account_number) от general_ledger_accounts, invoice_line_items группы по general_ledger_accounts.account_description HAVING графа (DISTINCT invoice_line_items.account_number)> 1 порядка по количеству (DISTINCT invoice_line_items.account_number) desc; –

ответ

0

Во-первых, в вашем предложении FROM, вам нужно будет присоединиться к GENERAL_LEDGER_ACCOUNTS таблицу с INVOICE_LINE_ITEMS таблицу, используя условие, что GENERAL_LEDGER_ACCOUNTS.ACCOUNT_NUMBER = INVOICE_LINE_ITEMS.ACCOUNT_NUMBER.

Затем (над этим) в вашем предложении SELECT укажите три столбца, которые вам нужны.

Вам не нужен пункт WHERE, так как вы рассматриваете все строки.

Используйте предложение GROUP BY, чтобы указать столбцы, которые вы хотите заполнить. Так как вы хотите, чтобы агрегаты (COUNT и SUM) для каждого ACCOUNT_NUMBER, то вы просто хотите ACCOUNT_NUMBER в своем GROUP BY.

Для фильтрации групп используйте HAVING. В вашем случае вам нужны группы HAVING a COUNT над определенным пороговым значением.

Наконец, используйте ORDER BY, чтобы заказать группы по SUM в DESC окончание заказа.

* СПОЙЛЕР: TRY РАБОТУ ЕГО САМИ ПЕРВЫЙ *

SELECT gla.account_description, count(*), sum(ili.line_item_amount) 
FROM general_ledger_accounts gla 
INNER JOIN invoice_line_items ili ON ili.account_number = gla.account_number 
GROUP BY gla.account_description 
HAVING count(*) > 1 
ORDER BY SUM(ili.line_item_amount) DESC 
+0

Спасибо! Всего несколько вопросов, как «count (*)» знает, чтобы подсчитывать записи только из ili, так как мы говорим «ОТ gla»? В чем разница между «внутренним соединением» и «соединением»? Оба, похоже, работали одинаково. Возможно, я должен был просто взять подсказку и сделать одну часть за раз. Я был просто ошеломлен этим. –

+0

'COUNT (*)' подсчитывает общее количество записей в каждой группе. Я предполагаю, что 'ACCOUNT_NUMBER' является первичным ключом в' GENERAL_LEDGER_ACCOUNTS'. Таким образом, в 'GENERAL_LEDGER_ACCOUNTS' может быть только одна учетная запись с' ACCOUNT_NUMBER', скажем, 1234. Предположим, что есть 6 строк '' ili' с тем же номером учетной записи. Затем соединение между 'gla' и' ili' будет производить 6 строк с номером учетной записи 1234. Если бы там было, скажем, 2 учетных записи в 'gla' с номером учетной записи 1234, то соединение получило бы 2x6 = 12 строк (и мой запрос будет неправильным). Но вот почему у вас всегда есть ... –

+0

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

Смежные вопросы