2015-10-24 3 views
-1

заранее за вашу помощь. У меня есть несколько таблиц, найти их здесь: Click for image of ERDСоединения (Oracle SQL) и общая сумма проблем

Бизнес-спонсоры могут быть либо предприятиями, либо выпускниками. Эти бизнес-спонсоры могут делать пожертвования. Эти пожертвования могут быть денежными, грантами на поездки и т. Д. Однако их ценность хранится в следующем формате: $ x, xxx в разделе «значение» в «Пожертвование».

Я должен перечислить всех спонсоров бизнеса (BusinessID AND AlumniID), которые пожертвовали сумму общей стоимостью более 25 000 долларов США. Результаты должны быть отсортированы в порядке убывания суммарной суммы.

Я screenshotted результаты DESC запросов к Выпускник, донорства и BusinessSponser, если это помогает: DESC QUERIES

Я действительно уверен, как продолжить вперед, любая помощь очень ценится. Спасибо заранее.

+0

Имеют ли поля AlumniID и BusinessID одинаковые типы данных/структуру? – toonice

+0

Не ясно, отношения между выпускником и BusinessSponser. –

+0

BusinessSponser использует Alumnus 'AlumniID' как внешний ключ. Поле AlumniID и BusinessID имеют одинаковый тип данных (int). –

ответ

0
SELECT A.AlumnID, SUM(D.Value) 
FROM BusinessSponser B 
JOIN Alumnus A 
    ON B.AlumnID = A.AlumnID 
JOIN Donation D 
    ON D.BusinessID = B.BusinessID 
GROUP BY A.AlumnID 

UNION 

SELECT A.AlumnID, SUM(D.Value) 
FROM Alumnus A 
JOIN Donation D 
    ON D.AlumnID = B.AlumnID 
GROUP BY A.AlumnID 
+0

Этот код не работает. Однако я ценю ваш вклад. –

+0

не работал, потому что ошибка или потому что не вернули результат, который вы хотите? –

+0

Я сказал вам подготовить один http://sqlfiddle.com/, чтобы у нас было с чем работать. –

0

Try ...

SELECT A.AlumniID, 
     B.FirstName, 
     B.LastName, 
     A.BusinessID, 
     C.BusinessName 
     A.TotalDonation 
FROM (SELECT AlumniID, 
       BusinessID, 
       SUM(Value) AS TotalDonation 
     FROM Donation 
     WHERE AlumniID IS NOT NULL 
     GROUP BY AlumniID 
     UNION SELECT AlumniID, 
        BusinessID, 
        SUM(Value) AS TotalDonation 
      FROM Donation 
      WHERE BusinessID IS NOT NULL 
      GROUP BY BusinessID) A 
    LEFT JOIN Alumnus B 
      ON A.AlumniID = B.AlumniID 
    LEFT JOIN BusinessSponsor C 
      ON A.BusinessID = C.BusinessID; 

Я начал с запросом -

SELECT AlumniID, 
     BusinessID, 
     SUM(Value) AS TotalDonation 
FROM Donation 
WHERE AlumniID IS NOT NULL 
GROUP BY AlumniID 

Это дает нам AlumniID и TotalDonation для всех выпускников. BusinessID был воспроизведен здесь, так что я мог бы объединить выше запрос с запросом ниже, чтобы сформировать один запрос ...

Отсюда я выполнил LEFT JOIN с таблицей и другой Выпускник LEFT JOIN с таблицей BusinessSponsor, чтобы получить результирующий список.

Я рекомендую вам выполнить дальнейшие исследования -

  • различных типов соединений и их характеристики
  • нулевых значений и, как обнаружить и обработать их
  • SUM и GROUP BY

Если у вас есть какие-либо вопросы или комментарии, пожалуйста, напишите ниже.

спасибо.

+0

Привет, этот код не работает, к сожалению. Я приложил ответы от запросов DESC, отправленных на таблицы, вы найдете изображение в исходном вопросе выше ^^^ Опять же, я ценю, что вы помогаете мне. Престижность вам, добрый сэр, вы, наверное, джентльмен и ученый. –