Оператор SQL, количество подзапросов? - PullRequest
1 голос
/ 15 августа 2011

У меня есть следующие таблицы SQL

Отдел

|name|employees|

Employee

|name|gender|type|dead |
|John|male  |good|yes  |
|Mary|female|bad |no   |
|Joe |male  |ugly|maybe|

Я хотел бы написать заявление, которое возвращает

| type | n of employees | n of male employees | n of departments |

У меня есть

SELECT e.type, count(e), count(d) 
FROM Department d 
JOIN d.employees e
WHERE e.dead = maybe 
GROUP BY e.type

Это, конечно, не хватает «мужчин-работников». Я застрял здесь, так как я не уверен, где указать дополнительное предложение e.gender = male.

Я забыл упомянуть: HQL или критерии были бы хорошими.

Ответы [ 2 ]

3 голосов
/ 15 августа 2011

Если исходный запрос и схема верны:

SELECT 
   e.type, 
   count(e), 
   count(d), 
   count (case when gender = 'male' then 1 else NULL end) AS NumberOfMaleEmployees
from Department d 
JOIN d.employees e
WHERE e.dead = 'maybe' 
GROUP BY e.type
2 голосов
/ 19 августа 2011

Только для справки:

SELECT 
   e.type, 
   count(e), 
   count(d), 
   sum(case when gender = 'male' then 1 else 0 end)
from Department d 
JOIN d.employees e
WHERE e.dead = 'maybe' 
GROUP BY e.type

работает на HQL. Спасибо всем!

...