Loading...
simeon_petrov avatar simeon_petrov 45 Точки

[Exercise] 5 Data Aggregation * Smallest Deposit Group per Magic Wand Size

Select the deposit group with the lowest average wand size.

select [DepositGroup] FROM
  (SELECT w.DepositGroup AS [DepositGroup], AVG(w.MagicWandSize) AS
    [LongestMagicWand]
     FROM WizzardDeposits AS w
        GROUP BY [DepositGroup]   ) AS Result
        HAVING Result.[LongestMagicWand] = min(Result.LongestMagicWand)

Така не става, някой може ли да каже как трябва да се направи?

Тагове:
0
Databases Basics
wallbanger avatar wallbanger 54 Точки
SELECT avgTbl.DepositGroup
FROM
(
SELECT av.DepositGroup, AVG(av.MagicWandSize) AS AvgMGWS FROM [dbo].[WizzardDeposits] AS av
        GROUP BY av.DepositGroup) avgTbl
JOIN
(
   SELECT MIN(AvgSize.AvgMGWS) AS mmm
FROM 
        (
           SELECT av.DepositGroup, AVG(av.MagicWandSize) AS AvgMGWS
                     FROM [dbo].[WizzardDeposits] AS av
                         GROUP BY av.DepositGroup
        )
                 AS AvgSize
) AS minTbl
ON avgTbl.AvgMGWS=minTbl.mmm

 

2
09/10/2016 11:50:27
simeon_petrov avatar simeon_petrov 45 Точки

Благодаря, много полезно!

0
wallbanger avatar wallbanger 54 Точки

Сори за качеството, но бързах като го писах :(

0
simeon_petrov avatar simeon_petrov 45 Точки

Перфектно е! Качеството си е ОК.

0
BorisSimeonov avatar BorisSimeonov 26 Точки

Още едно бързо решение за тези, които ще решават задачката, но имат проблеми :)

SELECT
                    w.[DepositGroup]
FROM           WizzardDeposits w
GROUP BY   w.[DepositGroup]
HAVING AVG (w.MagicWandSize) = (
        SELECT
                     MIN (WandSizeTable.AverageSizes) AS MinimalSize
        FROM (
                    SELECT
                                AVG (w.MagicWandSize) AS AverageSizes
                    FROM WizzardDeposits w
                    GROUP BY w.DepositGroup

        ) AS WandSizeTable
)

0
18/01/2017 22:47:54
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Може ли да ми обясните на български какво се иска в тази задача?

1
Maria_ls avatar Maria_ls 383 Точки

@Zornica, Иска се подобно на предната, но да вземем средните Wandsize за всяка група и да изкараме само тези с най-ниските ст-сти за въпросното. От пръв опит - на един път явно няма да стане...

1
27/01/2017 14:29:25
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Ох, много ми е трудно да разбера. Как така само най-ниските стойности. Аз условието го превеждам така:

"Изберете групата с най-ниска средна стойност.", което за мен е един ред (една група). Защо в решението има два реда? Явно групите имат еднакви стойности. Много съм зле явно.. сега ще изкарам колоната да видя.

 

1
27/01/2017 15:45:59
baremka avatar baremka 0 Точки

ЕТО И МОЕТО РЕШЕНИЕ, ЗА КОЕТО В JUDGE МИ ДАДЕ 100/100:

SELECT DepositGroup
FROM WizzardDeposits
GROUP BY [DepositGroup]
HAVING AVG(MagicWandSize) <
(
    SELECT AVG(MagicWandSize) FROM WizzardDeposits
)

 

Поздрави на всички!

0
DDaskalov avatar DDaskalov 10 Точки

Това наистина е добро и кратко... поне за джъджа става :) Но все още се опитвам да разбера как да сработи в генералния случай и да минава в джъджа...

0
31/01/2017 22:14:51
Jessie avatar Jessie 3 Точки

Че е кратко .... кратко е. Но е абсолютна случайност че е сработило - това е така само защото средната дължина на всички пръчки е 21, а верните отговори са с 20. Сега си представете в някоя група да има много по-големи пръчки (можете да си добавите такива записи в базата), което ще качи общата средна дължина и вече пресяване с:

HAVING AVG(MagicWandSize) <
(
    SELECT AVG(MagicWandSize) FROM WizzardDeposits
)

ще даде всички под общата средна стойност, а не само най-малките!

Мале малко перверзно звучи с тия пръчки : )

0
31/01/2017 13:47:49
DDaskalov avatar DDaskalov 10 Точки

Напълно си прав. и аз обмислях такъв вариант...

0
DenitsaDremsizova avatar DenitsaDremsizova 3 Точки

Най-краткото, което успях да измисля:

SELECT DepositGroup
 FROM WizzardDeposits
 GROUP BY DepositGroup
 HAVING AVG(MagicWandSize) = (
    SELECT TOP (1) AVG(MagicWandSize)
    FROM WizzardDeposits
    GROUP BY DepositGroup
    ORDER BY AVG(MagicWandSize)
 );

@Зорница - според мен си съвсем права да разбираш условието като "изберете ГРУПАТА (в ед. число) с най-малък среден Magic Wand Size", защото точно това пише... Реално ако сметнем средният Magic Wand Size (каквото и да значи това) като float, както би трябвало, резултатът си е само един (Troll Chest групата е с 20,219512195122, а Venomous Tongue с 20,3). Тогава това щеше да е достатъчно:

SELECT TOP (1) DepositGroup
 FROM WizzardDeposits
 GROUP BY DepositGroup
 ORDER BY AVG(CAST((MagicWandSize) AS FLOAT));

Но явно който е писал задачата е имал предвид да се смятат средните стойности като цели числа и съответно на двете групи ще е все 20.

0
Sotirovgym avatar Sotirovgym 2 Точки

А защо моето решение не го приема judge?

SELECT TOP (2) DepositGroup, AVG(MagicWandSize) AS AverageSize
  FROM WizzardDeposits
GROUP BY DepositGroup
ORDER BY AVG(MagicWandSize)

0
butoff avatar butoff 33 Точки

Моят кандидат:

SELECT TOP(2)DepositGroup  FROM WizzardDeposits
GROUP BY DepositGroup
ORDER BY AVG(MagicWandSize)

 

Групирането на магьосниците става възможно с GROUP BY , а подреждането според данните от AVG(MagicWandSize).

Подреждаме ги ascending-по подразбиране и избираме ТОП 2

Keep It Simple Stupid

 

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