Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Hristo_Penchev avatar Hristo_Penchev 389 Точки

[Homework] Бази данни - 5. Advanced-SQL -Problem 27

Здравейте, колеги,

Реших задачата по следния начин:
 

SELECT TOP(1) t.Name, COUNT(*) AS [Number of Employees] FROM Towns t
JOIN Addresses a ON t.TownID = a.TownID
JOIN Employees e ON a.AddressID = e.AddressID
GROUP BY t.Name
ORDER BY [Number of Employees] DESC

 

Но подобно решение е дървено. В подобна ситуация ако имаме 10 милиона реда, да ги нареждаме не е добра практика. Търся начин да реша задачата с MAX, вместо с ORDER BY. Опитах нещо от типа на 

 

WITH summary AS (
SELECT  t.Name, COUNT(*) AS [Number of Employees] FROM Towns t
JOIN Addresses a ON t.TownID = a.TownID
JOIN Employees e ON a.AddressID = e.AddressID
GROUP BY t.Name
)
SELECT Name, MAX([Number of Employees])
FROM summary

но ми дава следната грешка: Column 'summary.Name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Опитах и други варианти, но нещо не правя както трябва в групирането. Някой може ли да помогне? Благодаря предварително

Тагове:
1
Databases Basics
Pavel_R avatar Pavel_R 57 Точки

Ето едно решение което измислих без TOP и ORDER BY, но не знам колко е ефективно http://pastebin.com/3QcmxVSn

1
Hristo_Penchev avatar Hristo_Penchev 389 Точки

Стана, мерси!

0
enevlogiev avatar enevlogiev 1168 Точки

MAX в бекграунда работи със сорт и после топ (виж execution плана, ако не вярваш), така че не вярвам да спестиш нещо.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.