Группировка по трем таблицам - PullRequest
1 голос
/ 21 июня 2011

У меня три таблицы

tbl_worker

City   WorkerName     Job
 10     Raymond    Carpenter
 10     Sara       Programmer 
 11     John       Painter
 11     Alice      Booker

tbl_workshop

City    WorkshopName   
 10       Dell         
 11       Apple
 10       Sony 

Tbl_city
  Id    Name
  10    Mexico
  11    Sydney

Теперь я хочу такой результат:

City    WorkersQty    WorkshopQry
 Mexico     2               2
 Sydney     2               1

В результате возвращается количество рабочих и мастерских, которые зарегистрированы в разных городах. какой запрос мне написать?

Ответы [ 2 ]

2 голосов
/ 21 июня 2011

Группируйте таблицы tbl_workshop и tbl_worker по отдельности, затем используйте LEFT JOIN, чтобы получить результаты:

SELECT c.City,
    k.Cnt AS WorkersQty,
    w.Cnt AS WorkshopQry
FROM Tbl_city c
  LEFT JOIN (
    SELECT City, COUNT(*) Cnt
    FROM tbl_worker
    GROUP BY City
    ) k ON c.ID = k.City
  LEFT JOIN (
    SELECT City, COUNT(*) Cnt
    FROM tbl_workshop
    GROUP BY City
    ) w ON c.ID = w.City

Если вы хотите показать только города, в которых есть мастерские или рабочие, добавьте:

WHERE k.Cnt > 0 OR w.Cnt > 0
0 голосов
/ 21 июня 2011

Используйте Dense_rank, чтобы получить количество мастерских или рабочих

SELECT city, MAX(WorkshopQty) AS WorkshopQty , MAX(WorkersQty) AS WorkersQty
FROM (
        SELECT c.name AS City, 
               DENSE_RANK() OVER (PARTITION BY c.id ORDER BY WorkshopName) AS WorkshopQty,
               DENSE_RANK() OVER (PARTITION BY c.id ORDER BY WorkerName) AS WorkersQty  
        FROM tbl_city c
        INNER JOIN tbl_workshop s ON s.city = c.id
        INNER JOIN tbl_worker w ON w.city = c.id
    ) s
GROUP BY City
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...