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

Есть задача вывести имя компании, у которой наибольшее число сотрудников.
Я считерил, так как данных мало и нашел таки эту компанию с 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
11.01.2019, 14:53
    #39758473
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в Gamma больше всего
Код: 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
11.01.2019, 15:16
    #39758485
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в Gamma больше всего
iap,

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

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

Я бы, например, так лаконично не написал. Я бы во внутреннем подзапросе посчитал выборку: компания - количество сотрудников, а во внешнем - отобрал бы top(1) with ties. Инерция мышления, разница в классе и всё такое. Снимаю шляпу.
:-)
...
Рейтинг: 0 / 0
11.01.2019, 16:26
    #39758526
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в Gamma больше всего
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
11.01.2019, 16:37
    #39758536
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в Gamma больше всего
dermamaя поставил номера в каком порядке он выполняется, верно?Как выполняется запрос смотрят в его плане выполнения.
...
Рейтинг: 0 / 0
11.01.2019, 16:52
    #39758543
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в Gamma больше всего
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
11.01.2019, 16:53
    #39758544
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в Gamma больше всего
Пардон, наверху 4, конечно же.
...
Рейтинг: 0 / 0
11.01.2019, 17:01
    #39758548
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
в Gamma больше всего
uaggster,

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

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


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