SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.01.2009 13:37:18

George_1
Участник
Зарегистрирован: 14.01.2009
Сообщений: 4

Помогите написать корреляционный запрос!!!

Написал запрос:

select depno, step, count(step) as qty
from emp
group by depno, step
order by depno, step;

В результате получил:

Название кафедры - Должность - Количество
Кафедра 1          профессор            2
Кафедра 1          доцент               3
Кафедра 2          профессор            4
Кафедра 2          доцент               8
Кафедра 3          доцент               3

А очень хотелось бы вот так:

Название кафедры - Профессоров - Доцентов
Кафедра 1                    2          3
Кафедра 2                    4          8
Кафедра 3                    0          3

Помогите!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Неактивен

 

#2 14.01.2009 13:40:21

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите написать корреляционный запрос!!!

1. group by автоматически подразумевает order by.
2. SELECT depno, SUM(IF(step = 'доцент', 1, 0)), SUM (IF(step='профессор', 1, 0)) FROM emp GROUP BY 1;

Неактивен

 

#3 14.01.2009 17:11:27

George_1
Участник
Зарегистрирован: 14.01.2009
Сообщений: 4

Re: Помогите написать корреляционный запрос!!!

Спасибо большое!

А можно ли получить тот же результат написав такой подзапрос:

select depno (select count(*) from emp where step = 'профессор') 'профессоров'
        (select count(*) from emp where = 'доцентов') 'доцентов'
from emp;

Неактивен

 

#4 14.01.2009 19:28:17

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите написать корреляционный запрос!!!

Честно говоря, не понял, в чем вопрос. Если в том, как поименовать колонки, то - да, можно.
SELECT depno AS Department, SUM(IF(step = 'доцент', 1, 0)) AS Docentis, SUM (IF(step='профессор', 1, 0)) AS Professors FROM emp GROUP BY 1;

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

Неактивен

 

#5 15.01.2009 10:33:54

George_1
Участник
Зарегистрирован: 14.01.2009
Сообщений: 4

Re: Помогите написать корреляционный запрос!!!

Вопрос в том, можно ли решить проблему описанную в первом посте с помощью коррелированного подзапроса?

Неактивен

 

#6 15.01.2009 16:13:45

George_1
Участник
Зарегистрирован: 14.01.2009
Сообщений: 4

Re: Помогите написать корреляционный запрос!!!

Насколько верен будет такой запрос:

select a.depno, a.qty as 'профессор', b.depno, b.qty as 'доцент'
from
(select depno, count(*) as qty from emp where step='профессор' group by depno) as a,
(select depno, count(*) as qty from emp where step='доцент' group by depno) as b
where a.depno=b.depno
order by a.depno

Неактивен

 

#7 15.01.2009 20:27:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите написать корреляционный запрос!!!

Предыдущий Ваш вариант был лучше. В этом варианте будут проблемы, если, например, нет ни
одного доцента, но есть профессоры.

А почему нужен именно подзапрос?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson