|
|
|
Подобие, перекрестного запроса в Access
|
|||
|---|---|---|---|
|
#18+
Всем здравствуйте. Имеется таблица Сотрудники с полями: Код, Имя, Отдел, Зарплата, Пол. Требуется найти разницу в средней зарплате между мужчинами и женщинами по отделам. Т.е. результат запроса будет выглядеть так: Название отдела - Среднее зарплата для мужчин в этом отделе - Средняя зарплата для женщин в этом отделе - Разница между зарплатами. В Access 2007 сделал это при помощи перекрестного запроса. В MySQL насколько понимаю такого решения нет. Вот и не пойму как требуется составить условие. Пример запроса в Access 2007 прилагаю. Если не трудно подскажите пожалуйста решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 17:32:19 |
|
||
|
Подобие, перекрестного запроса в Access
|
|||
|---|---|---|---|
|
#18+
Mihavk, Модератор: Пожалуйста, не надо постить ссылки на файлообменники. Что можно изложить текстом - пишите текстом. Что нельзя изложить текстом - прикладывайте к посту картинку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 18:01:55 |
|
||
|
Подобие, перекрестного запроса в Access
|
|||
|---|---|---|---|
|
#18+
Тоже мне проблема... два подзапроса на расчёт средних зарплат с разной гендерной фильтрацией... А чему будет равна разность, если в отделе, скажем, одни мужики? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2014, 21:22:37 |
|
||
|
Подобие, перекрестного запроса в Access
|
|||
|---|---|---|---|
|
#18+
Akina, здравствуйте, ну вот такие подзапросы: 1)SELECT Сотрудники.Отдел, avg(Сотрудники.Зарплата) AS [Мужчины] FROM Сотрудники WHERE Сотрудники.Пол = "М" GROUP BY Сотрудники.Отдел; 2)SELECT Сотрудники.Отдел, avg(Сотрудники.Зарплата) AS [Женщины] FROM Сотрудники WHERE Сотрудники.Пол = "Ж" GROUP BYСотрудники.Отдел; Я не пойму как вывести разницу, примерно вот так: ABS([Мужчины] - [Женщины]). Как все это сделать в 1 запросе. Если будут одни мужчины в отделе или одни женщины, ну наверное, пусть тогда выводит эту же зарплату, как будто бы у другого пола 0 стоит (Если есть другое предложение в этом моменте, выслушаю Вас). На Access, при помощи перекрестного запроса было вот так: TRANSFORM Avg(Сотрудники.Зарплата) AS [Avg-Зарплата] SELECT Сотрудники.Отдел, (MAX([AVG-Зарплата])-MIN([AVG-зарплата])) AS [Разница в зарплате] FROM Сотрудники GROUP BY Сотрудники.Отдел PIVOT Сотрудники.Пол; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 12:45:32 |
|
||
|
Подобие, перекрестного запроса в Access
|
|||
|---|---|---|---|
|
#18+
Вам в агрегатной функции надо вставить условие. Вот так примерно: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 22:22:59 |
|
||
|
Подобие, перекрестного запроса в Access
|
|||
|---|---|---|---|
|
#18+
SELECT отдел, ABS(AVG(IF(пол = муж,summa,NULL)) - AVG(IF(пол = жен,summa,NULL))) FROM таблица GROUP BY 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2014, 22:24:08 |
|
||
|
Подобие, перекрестного запроса в Access
|
|||
|---|---|---|---|
|
#18+
mikhalken, спасибо, но не понял, что значит summa. Сделал вот так: SELECT Отдел, ABS((IF(Сотрудники.Пол='М',avg(Зарплата),'null')) - (IF(Сотрудники.Пол='Ж',avg(Зарплата),'null'))) FROM Сотрудники GROUP BY Отдел, Пол; вот что выдал: ОАА 6333.333333333333 ОАА 6000 КПА 9500 КПА 12500 САИ 7000 САИ 7000 Надо, что бы он объединил их опять по отделам и нашел разницу в каждом из них, что то типа такого: ОАА 333.33333333333 КПА 3000 САИ 0 Как бы объединить 1 со 2, 3 с 4 и т.д. итерации. Нахожусь в ожидании подсказки :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 00:43:55 |
|
||
|
Подобие, перекрестного запроса в Access
|
|||
|---|---|---|---|
|
#18+
Ты не прав, изменив мой пример))) Вот что у тебя должно быть примерно: SELECT Отдел, ABS(AVG(IF(Сотрудники.Пол = 'М',Зарплата,NULL)) - AVG(IF(Сотрудники.Пол = 'Ж',Зарплата,NULL))) FROM Сотрудники GROUP BY 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 00:58:00 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38787051&tid=1834031]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 340ms |

| 0 / 0 |
