[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Mysql запрос в запросе
svolota
Выдать инфу об отделении с максимальным количеством работающих сотрудников.

- таблица Branch предназначена для сохранения информации об отделениях (офисах) предприятия и оснащена следующими атрибутами:

Bno street city tel_no

Атрибут Bno в данной таблице является первичным ключом и в соответствии с правилом целостности сущности не способен принимать неопределенных значений. Предназначение остальных атрибутов понятно, исходя из их названия.
- таблица Staff предназначена для сохранения информации о сотрудниках и оснащена следующими атрибутами:

Sno FName Lname Address Tel_no Position Sex DOB Salary Bno

В данной таблице Sno – первичный ключ, предназначенный для уникальной идентификации записей о сотрудниках, Position – строковый атрибут , содержание которого определяет занимаемую должность, DOB – атрибут типа даты с данными о днях рождения сотрудников, Salary – числовой атрибут с зарплатой сотрудников. Атрибут Bno – внешний ключ для связи с таблицей Branch.

user posted image

user posted image

Помогите, пожалуйста, сократить запрос: SELECT * FROM (SELECT Bno, count(*) as count_s from staff group by Bno) as l2 where count_s = (SELECT MAX(count_s) from (SELECT Bno, count(*) as count_s from staff group by Bno) as l1)
svolota
Ок, а можно ли как то SELECT Bno, count(*) as count_s from staff group by Bno в первой части представить алиасом t1 (или по другому - без создания представления) чтобы во второй части обратиться к нему для поиска MAX(count_s).
Valick
Цитата
а можно ли как то

можно попробовать
не совсем понятно, чего вы хотите добиться этим запросом
group by Bno - это несколько неожиданно...
опишите словами чего вы хотите добиться этим запросом

_____________
Стимулятор ~yoomoney - 41001303250491
svolota
запрос "SELECT Bno, count(*) as count_s from staff group by Bno" должен делать выборку из branch вида брэнч ID - кол-во стафа в этом офисе.
user posted image
Valick
svolota, я спрашивал чего вы хотите добиться вообще запросом
SELECT * FROM (SELECT Bno, count(*) as count_s from staff group by Bno) as l2 where count_s = (SELECT MAX(count_s) from (SELECT Bno, count(*) as count_s from staff group by Bno) as l1)
это для того чтобы найти офис с максимальныь количеством сотрудников? что потом вы собираетесь делать с этой полученной информацией?

SELECT Bno, count(*) as count_s FROM staff GROUP BY Bno HAVING count_s = MAX(count_s)
но что дальше-то?

_____________
Стимулятор ~yoomoney - 41001303250491
svolota
Цитата (Valick @ 17.03.2014 - 16:01)
svolota, я спрашивал чего вы хотите добиться вообще запросом
SELECT * FROM (SELECT Bno, count(*) as count_s from staff group by Bno) as l2 where count_s = (SELECT MAX(count_s) from (SELECT Bno, count(*) as count_s from staff group by Bno) as l1)
это для того чтобы найти офис с максимальныь количеством сотрудников? что потом вы собираетесь делать с этой полученной информацией?

SELECT Bno, count(*) as count_s FROM staff GROUP BY Bno HAVING count_s = MAX(count_s)
но что дальше-то?

Сократить пару сотрудников, перевести в другой офис, арендовать больше помещений для этого офиса ну и так далее. Кстати, результатом оказался 0 строк.
svolota
Можно ли создать, чтобы не обращаться к базе 2 раза с одинаковым запросом, временную таблицу или что-то на подобии этого из запроса SELECT Bno, count(*) as count_s from staff group by Bno. Если можно то как?
Valick
SELECT `Bno`, MAX(`co`) `count_s` FROM (SELECT `Bno`, count(*) `co` FROM `staff` GROUP BY `Bno`) `s` 


_____________
Стимулятор ~yoomoney - 41001303250491
svolota
Цитата (Valick @ 17.03.2014 - 18:19)
SELECT `Bno`, MAX(`co`) `count_s` FROM (SELECT `Bno`, count(*) `co` FROM `staff` GROUP BY `Bno`) `s` 

Так пробовал. Сделал в самом начале такой запрос. В BNO всегда 1 правильно считает только count
Valick
svolota, почему просто не отсортировать по count?
SELECT `Bno`, count(*) `count_s` FROM `staff` GROUP BY `Bno` ORDER BY `count_s` DESC



_____________
Стимулятор ~yoomoney - 41001303250491
svolota
Цитата (Valick @ 17.03.2014 - 19:06)
svolota, почему просто не отсортировать по count?
SELECT `Bno`, count(*) `count_s` FROM `staff` GROUP BY `Bno` ORDER BY `count_s` DESC

Я бы вообще сделал это несколькими запросами с create view но ведь интересно сделать одним запросом без представления. Откликнитесь кто может, пожалуйста.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.