2013-12-22 3 views
1

У меня есть три стола офис, менеджер, персонал. Ниже приведено содержание этих таблиц.Сложность в sql выбрать запрос

Офис

 office_id office_location office_telephone office_fax 

    100  brisbane   01438263   789 
    101  newyork   01457899   978 
    102  chicago   01457989   789 

менеджер

 office_id manager_id manager_name manager_phone 

    100  200   wayne   9879664878 
    101  201   tom   9745997669  
    102  202   harry   9789979799 

Персонал

 manager_id staff_id salary 

    200   300  3000 
    201   301  4000 
    200   302  5000 
    200   303  7856 
    201   304  4000 
    202   305  7856 
    202   306  6000 

Теперь мне нужен запрос, чтобы отобразить TOTA l количество сотрудников и их менеджера в каждом офисе.

Вот выход

office_id office_location manager_id count(staff_id) 

    100  brisbane   200   3 
    101  newyork   201   2 
    102  chicago   202   2 

образец До сих пор я пытался отображающая manager_id и сотрудников, работающих на них.

 SELECT manager_id,count(staff_id) from staff group by manager_id; 

Но у меня возникли проблемы с отображением office_id, а также его местоположения. Кто-нибудь может мне помочь?

+0

Просьба предоставить образец вывода для данных, которые вы указали. –

+0

aah просто забыл об этом. Скоро это предоставит. – user3127109

ответ

0
SELECT o.office_id, 
     o.office_location, 
     m.manager_id, 
     count(*) staff_count 
    from staff s 
inner join manager m 
    on m.manager_id = s.manager_id 
inner join office o 
    on o.office_id = m.office_id 
group by o.office_id, 
      o.office_location, 
      m.manager_id; 
+0

Thanx alot man !! – user3127109

0

Внутренний запрос получает рассчитывать и общая зарплата за один менеджер первый ... ТОГДА, двигайтесь вниз по цепочке, чтобы получить остальные детали

SELECT 
     s.manager_id, 
     m.manager_name, 
     m.manager_phone, 
     o.office_location, 
     o.office_telephone, 
     o.office_fax, 
     s.NumOfEmployees, 
     s.AllSalary 
    from 
     (select s1.manager_id, 
       count(*) as NumEmployees, 
       SUM(s1.salary) as AllSalary 
      from staff s1 
      group by s1.manager_id) s 
     join manager m 
      ON m.manager_id = m.manager_id 
      join office o 
       ON m.office_id = o.office_id 
+0

Но он не отображает номер штата. Не могли бы вы взглянуть на образец и дать мне некоторую помощь. – user3127109

0

Я только что создали таблицы и данные вы упоминали выше, и если вы просто хотите, чтобы столбцы, упомянутые в выводе, вы можете использовать только следующее:

SELECT O.office_id 
    ,office_location 
    ,M.manager_id 
    ,COUNT(staff_id) 
FROM Staff S 
INNER JOIN Manager M 
    ON S.manager_id = M.manager_id 
INNER JOIN Office O 
    ON O.office_id = M.office_id 
GROUP BY M.manager_id 
    ,O.office_id 
    ,O.office_location 
+0

Thanx для ответа человек !! – user3127109

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