Błąd w poleceniu

Odpowiedz Nowy wątek
2019-07-11 12:42
0

Witam,
Jest to mój pierwszy wpis na forum i na początek chciałbym prosić o pomoc w znalezieniu błędu w tym poleceniu:

SELECT ID, SN, MAX(M1,M2,M3) [MAX], ROUND(MAX((M1+M2+M3)/3.0),2) [MAX_AVG] FROM tests WHERE SN IN ( SELECT SN FROM ( SELECT SN FROM ( SELECT SN FROM tests GROUP BY SN HAVING COUNT(ID) >= 5) GROUP BY SN HAVING T >= 60 AND MIN(M1,M2,M3) >= MAX(M1,M2,M3)*0.9 ) GROUP BY SN HAVING MIN((M1+M2+M3)/3.0)>= 0.85*(MAX((M1+M2+M3)/3.0)) ) GROUP BY SN ORDER BY [MAX_AVG] DESC;

Po uruchomieniu pojawia się komunikat: "ERROR: misuse of aggregate: MAX()".

Pozostało 580 znaków

2019-07-11 13:14
0

GROUP BY ID, SN ORDER BY [MAX_AVG] DESC
Ale to bez sensu...

Pozostało 580 znaków

2019-07-11 13:22
1

To jakoś strasznie przekomplikowany in, analizując tylko podzapytanie:

SELECT 
    SN
FROM
    (SELECT
        SN
    FROM 
        (SELECT 
            SN
        FROM 
            tests
        GROUP BY 
            SN
        HAVING 
            COUNT(ID) >= 5
        )
    GROUP BY 
        SN
    HAVING 
        --w having piszemy zapytania do funkcji agregujących
        --skąd ma mieć informacje o T skoro nie masz go w źródłowej tabeli?
        T >= 60
        -- max w funkcji agregującej przyjmuje tylko jeden parametr, podzapytanie nie zwraca kolumn m1,m2,m3
        AND MIN(M1, M2, M3) >= MAX(M1, M2, M3) * 0.9
    )
GROUP BY 
    SN
HAVING 
    --jak w poprzednim warunku
    MIN((M1 + M2 + M3) / 3.0) >= 0.85 * (MAX((M1 + M2 + M3) / 3.0)

Pozostało 580 znaków

2019-07-11 14:50
0

Nie zgodzę się z tym, że funkcja MAX przyjmuje tylko jedną wartość, ponieważ gdy napisałem małe polecenie:
SELECT ID, MAX(M1,M2,M3) FROM tests;
zwraca mi największą wartość z podanych kolumn w każdym wierszu.

Wiem, że w having piszemy funkcje agregujące, ale czy to wyklucza napisanie polecenia z HAVING T >= 60 zamiast WHERE T >= 60 ?

edytowany 3x, ostatnio: Logic Dude, 2019-07-11 14:52

Pozostało 580 znaków

2019-07-11 15:06
1

Nie zgodzę się z tym, że funkcja MAX przyjmuje tylko jedną wartość

Czytaj uważnie co napisałem max w funkcji agregującej

Czyli miałem na myśli: Aggregate Functions , ty natomiast opisujesz funkcje SQL: Core Functions

I jak pisze w dokumentacji:

Note that max() is a simple function when it has 2 or more arguments but operates as an aggregate function if given only a single argument

Pozostało 580 znaków

2019-07-11 15:24
0

Okej. Rozumiem. Dziękuję za pomoc !

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0