powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / в Gamma больше всего
11 сообщений из 11, страница 1 из 1
в Gamma больше всего
    #39758465
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый денек!

Есть задача вывести имя компании, у которой наибольшее число сотрудников.
Я считерил, так как данных мало и нашел таки эту компанию с 4мя сотрудниками, а вот если данных миллион, то как мне искать, у меня нет больше мыслей. дайте направление в нужную сторону. Малости не хватает.

SELECT c.company_name
FROM company c
INNER JOIN
employee e
ON c.cid = e.cid
GROUP BY company_name
HAVING COUNT(enployee_name) > 3

запрос выводит верный результат
gamma
...
Рейтинг: 0 / 0
в Gamma больше всего
    #39758473
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
SELECT TOP(1) WITH TIES c.company_name
FROM company c JOIN employee e ON c.cid = e.cid
GROUP BY c.company_name
ORDER BY COUNT(*) DESC;
...
Рейтинг: 0 / 0
в Gamma больше всего
    #39758485
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,

Спасибо, а можно объяснить принцип работы данного запроса?
...
Рейтинг: 0 / 0
в Gamma больше всего
    #39758521
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermamaiap,

Спасибо, а можно объяснить принцип работы данного запроса?
Ничего особо сложного.
Связываем таблицу "компании" с таблицей "сотрудники". Получаем промежуточный резалтсет "компания-сотрудники"
Группируем полученный промежуточный резалтсет по имени компании - получаем список компаний (уникальные названия).
Сортируем полученный сгруппированный резалтсет по количеству строк с одинаковым названием компании по убыванию.
Извлекаем из отсортированной выборки 1 строку "с кандидатами", т.к. может оказаться более 1 компании с наибольшим числом сотрудников.
Будет работать, если среди компаний нет полных тёзок.
Если полные тёзки есть - может иногда работать неверно.

Я бы, например, так лаконично не написал. Я бы во внутреннем подзапросе посчитал выборку: компания - количество сотрудников, а во внешнем - отобрал бы top(1) with ties. Инерция мышления, разница в классе и всё такое. Снимаю шляпу.
:-)
...
Рейтинг: 0 / 0
в Gamma больше всего
    #39758526
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
uaggster,

3 SELECT TOP(1) WITH TIES c.company_name
1 FROM company c JOIN employee e ON c.cid = e.cid
2 GROUP BY c.company_name
4 ORDER BY COUNT(*) DESC;

я поставил номера в каком порядке он выполняется, верно?


кстати, если не сложно, напиши свой вариант запроса по данному заданию пожалуйста.
...
Рейтинг: 0 / 0
в Gamma больше всего
    #39758536
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaя поставил номера в каком порядке он выполняется, верно?Как выполняется запрос смотрят в его плане выполнения.
...
Рейтинг: 0 / 0
в Gamma больше всего
    #39758543
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermamauaggster,

2 SELECT TOP(1) WITH TIES c.company_name
1 FROM company c JOIN employee e ON c.cid = e.cid
2 GROUP BY c.company_name
3 ORDER BY COUNT(*) DESC;

я поставил номера в каком порядке он выполняется, верно?


кстати, если не сложно, напиши свой вариант запроса по данному заданию пожалуйста.
Нет, неверно.

invm , да он про логическую последовательность, а не про физическую.
:-)

dermama
Логический порядок обработки инструкции SELECT:
FROM
ON
JOIN
where
GROUP BY
WITH CUBE или WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
т.е. ты - должен думать так. Как думает sqlserver, как сказал invm - можно посмотреть в плане.
Иногда (эээ... всегда :-) ) sqlserver думает не так, как предписывает логический порядок выполнения запроса.
Но результат всегда такой, как если бы логический порядок выполнения неукоснительно соблюдался.
... но есть нюансы. :-)
...
Рейтинг: 0 / 0
в Gamma больше всего
    #39758544
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пардон, наверху 4, конечно же.
...
Рейтинг: 0 / 0
в Gamma больше всего
    #39758548
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
uaggster,

Спасибо, познавательно, про ордер я поставил на четвертое место, подумав что он заселектит и отсортирует потом) читаю сейчас книжку сборник рецептв SQL Энтони молинаро, там затронут был момент логической последовательности, но не вся. Так просто понимание приходит получше, однако пока над принципом работы запроса по выборке компании с наибольшим числом сторудников все еще думаю... (например вода кипит при 100 градусах - на уровне инстинкта , автоматика), чего не скажешь про это запрос.
...
Рейтинг: 0 / 0
в Gamma больше всего
    #39758561
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaнапример вода кипит при 100 градусах - на уровне инстинкта , автоматика
Вид homo sapiens еще не научился определять температуру на уровне инстинктов.
Так что поведай нам, с какой ты планеты, родной?
...
Рейтинг: 0 / 0
в Gamma больше всего
    #39758580
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamauaggster,

Спасибо, познавательно, про ордер я поставил на четвертое место, подумав что он заселектит и отсортирует потом) читаю сейчас книжку сборник рецептв SQL Энтони молинаро, там затронут был момент логической последовательности, но не вся. Так просто понимание приходит получше, однако пока над принципом работы запроса по выборке компании с наибольшим числом сторудников все еще думаю... (например вода кипит при 100 градусах - на уровне инстинкта , автоматика), чего не скажешь про это запрос. Логический порядок обработки инструкции SELECT
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / в Gamma больше всего
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]