Подсчет SQL и соединение - PullRequest
       4

Подсчет SQL и соединение

1 голос
/ 15 марта 2011

В этом семестре я прохожу курс обучения базам данных, и мы изучаем SQL.Я понимаю большинство простых запросов, но у меня возникли некоторые трудности с использованием статистической функции подсчета.

Я должен связать номер рекламы с номером объекта недвижимости с номером филиала, чтобы я мог подсчитать количество рекламных объявлений по номеру филиала и рассчитать их стоимость.Я настроил, как мне кажется, два подходящих новых представления, но я не знаю, что написать для оператора select.Правильно ли я подхожу к этому?У меня такое чувство, что я слишком усложняю это большое время ...

with ad_prop(ad_no, property_no, overseen_by) as
  (select a.ad_no, a.property_no, p.overseen_by
   from advertisement as a, property as p
   where a.property_no = p.property_no)
with prop_branch(property_no, overseen_by, allocated_to) as
  (select p.property_no, p.overseen_by, s.allocated_to
   from property as p, staff as s
   where p.overseen_by = s.staff_no)

select distinct pb.allocated_to as branch_no, count( ??? ) * 100 as ad_cost

from prop_branch as pb, ad_prop as ap
where ap.property_no = pb.property_no
group by branch_no;

Любое понимание будет высоко оценено!

Ответы [ 3 ]

0 голосов
/ 15 марта 2011

Я могу вам сказать, что вы делаете это слишком сложно. Это должен быть оператор select с парой соединений. Вам следует перечитать главу о соединениях или взглянуть на следующую ссылку

http://www.sql -tutorial.net / SQL-JOIN.asp

A объединение позволяет вам «объединять» данные из двух таблиц, основываясь на на общем ключе между двумя таблицами (можно объединить несколько таблиц вместе с большим количеством объединений ). Получив эту «объединенную» таблицу, вы можете притвориться, что это действительно одна таблица (псевдонимы используются для указания, откуда взялся этот столбец). Вы понимаете, как агрегаты работают на одной таблице, верно?

Я бы предпочел не давать вам ответ, чтобы вы могли на самом деле учиться:)

0 голосов
/ 15 марта 2011

Вы можете объединить предложения WITH в одно утверждение.Затем, я думаю, вам не хватает того, что столбцы, на которые есть ссылки в определении столбца, должны быть агрегированы, если они не включены в предложение GROUP BY.Таким образом, вы группируете свой отдельный столбец, а затем применяете агрегацию и математику в определениях столбцов.

SELECT
   s.allocated_to AS branch_no
  ,COUNT(a.ad_no) AS ad_count
  ,(ad_count * 100) AS ad_cost
...
GROUP BY s.allocated_to
0 голосов
/ 15 марта 2011

Вы можете упростить это следующим образом:

реклама
- ad_no
- property_no

property
- property_no
- overseen_by

staff
- staff_no
- alloc_to

SELECT s.allocated_to AS branch, COUNT(*) as num_ads, COUNT(*)*100 as ad_cost 
FROM advertisement AS a
INNER JOIN property AS p ON a.property_no = p.property_no
INNER JOIN staff AS s ON p.overseen_by = s.staff_no
GROUP BY s.allocated_to;

Обновление: изменено выше для соответствия потребностям вашей схемы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...