Dlaczego w group by musi być to co w selectcie

0

Dlaczego jeśli używam funkcji agregujących w selectcie to w group by muszą być pozostałe atrybuty z selecta?

Nie za bardzo rozumiem takich sytuacji, że np w group by grupuje po id_pracownika(klucz główny z tabeli pracownicy), mając w selectcie nazwisko pracownika trzeba dać je też do group by i komenda group by wyglądała by następującą:

GROUP BY id_pracownika, nazwisko_pracownika

I przecież id_pracownika to klucz główny, więc jest unikalny, więc jaki sens ma jeszcze grupowanie po nazwisku_pracownka?(trzeba go użyć bo w selectcie mamy nazwisko_pracownika)

0

Nowsze (i chyba bardziej zgodne z ANSI) SQL-e nie mają tego wymogu. Np. postgreSQL

1

dwa tygodnie temu Dlaczego podzapytanie bez group by nie zadziała
jak ktoś da radę przeczytać po angielsku (podejrzewam, że jeśli autor nie znalazł wątku sprzed dwóch tygodni to i po angielsku nie da rady) to tu jest fajnie opisane http://weblogs.sqlteam.com/jeffs/archive/2007/07/20/but-why-must-that-column-be-contained-in-an-aggregate.aspx czy też http://stackoverflow.com/questions/2777235/why-do-i-need-to-explicitly-specify-all-columns-in-a-sql-group-by-clause-why

0

Jesli chcesz wyświetlić jakies kolumny z tabeli to jesli juz grupujesz to po tym co wybierasz. Czy to malo oczywiste? Zawsze możesz zrobic group by 1. Jakos ciężko mi sobie wyobrazić grupowanie po czymś czego nie wybieram. Aha opuszczenie group by w sumie tez powinno zadziałać. Ćwicz po jakims czasie dojdziesz do wraz z tymi rzeczami na tyle ze intuicyjnie będziesz wiedzieć kiedy czego użyć żeby bylo najbardziej optymalnie.

0

@abrakadaber akurat użycie funkcji agregującej bez GROUP BY jest możliwe i pozwala odpowiedzieć na pytanie o ilość i wiek osób. Ten artykuł jest dość stary, obecnie można to rozwiązać w ten sposób (na MSSQL).

SELECT city, COUNT(*) OVER() as residents, age
FROM people
WHERE state='ma'
GROUP BY city

Do autora, nie zamieściłeś informacji dotyczących używanego RDBMS. Ale jeśli korzystasz z MS SQL to poczytaj o funkcjach okna.

0

Autorze, jedno zasadnicze pytanie brzmi, po co grupować po kluczu głównym ?
Przecież w ten sposób nic nie agregujesz, bo każdy wiersz jest unikalny.

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