Дед Мазай
Гений
(58137)
4 года назад
Это условие
`Deptno` IN (SELECT DISTINCT `Deptno` FROM `Emp`)
всегда верно и поэтому не имеет смысла.
И как оно должно работать? Структура таблицы мне неизвестна. Может надо считать количество различных значений в поле Empno?
NoName NoLastNameУченик (91)
4 года назад
Мне нужно запросом по каждому Deptno сосчитать количество людей, принятых на работу в январе 2009. В Deptno есть подразделения 10,20,30 нужно по каждому отдельную строчку с количеством таких людей.
NoName NoLastNameУченик (91)
4 года назад
А можно как-то без GROUP BY обойтись? Я собираюсь этот запрос сделать подзапросом в большом запросе. В подзапросе нельзя GROUP BY делать..
Пытаюсь сделать в этом ключе:
SELECT `Deptno` AS "Номер подразделения", COUNT(`Deptno`) AS "Общее число сотрудников", (SELECT COUNT(`Deptno`) FROM `Emp` WHERE YEAR(`Hiredate`)="2009")AS "Принят", SUM(`Sal`) AS "Оклад" FROM `Emp` GROUP BY `Deptno`
Но подсчет идет не по каждому подразделению, как задумано, а по всем сразу..
NoName NoLastNameУченик (91)
4 года назад
если без подзапроса, то результат всегда будет выводить в двух столбцах "Общее число сотрудников" и "Принят" 1 и 3, так как запрос выполнится только на тех, что был принят в январе 2009. Мне же нужно так, чтобы было просто число сотрудников для каждого подразделения в столбце "Общее число сотрудников" и число тех, кто как раз с января 2009 в столбце "Принят"
Дед МазайГений (58137)
4 года назад
Вложенный запрос не нужен. Чтоб вычислить агрегатную функцию не для всех строк, пиши так:
count(case when условие then значение end)
Когда условие не соблюдается case вернёт null, и count не посчитает это значение. Аналогично для других агрегатных функций.
С вложенными запросами тоже можно, но писанины будет больше.
NoName NoLastNameУченик (91)
4 года назад
Получилось!!! Большое спасибо !!!
Сделал так:
SELECT `Deptno` AS "Номер подразделения", COUNT(`Deptno`) AS "Общее число сотрудников", COUNT(CASE WHEN YEAR(`Hiredate`)=2009 THEN 1 END)AS "Принят", SUM(`Sal`) AS "Оклад" FROM `Emp` GROUP BY `Deptno`
Сейчас попробую процентный оклад..
Таблица Emp содержит такие поля: Empno, Ename, Job, Mgr, Hiredate, Sal, Comm, Deptno
Всего есть 3 департамента.
Я пытался сделать так: SELECT COUNT(`Deptno`) FROM `Emp` WHERE YEAR(`Hiredate`)="2009" and MONTH(`Hiredate`)="01" and `Deptno` IN (SELECT DISTINCT `Deptno` FROM `Emp`)
Но результат, не тот который нужен. Я использовал под запрос, с целью сделать проход по каждому департаменту и расчет количества, но это не срабатывает и он считает один раз неверное число, в чем может быть проблема? Надеюсь на вашу помощь!