Mam tabeli emp
z następującą strukturę i dane żadne funkcje zagregowane:GROUP BY zachowań gdy są obecne w klauzuli SELECT
name dept salary
----- ----- -----
Jack a 2
Jill a 1
Tom b 2
Fred b 1
Kiedy wykonać następujące SQL:
SELECT * FROM emp GROUP BY dept
otrzymuję następujący wynik:
name dept salary
----- ----- -----
Jill a 1
Fred b 1
Na jakiej podstawie serwer zdecydował wrócić Jill i F czerwony i wykluczyć Jacka i Toma?
Uruchomiłem to zapytanie w MySQL.
Uwaga 1: Wiem, że zapytanie nie ma sensu samo w sobie. Próbuję debugować problem ze scenariuszem "GROUP BY". Próbuję zrozumieć domyślne zachowanie w tym celu.
Uwaga 2: Jestem przyzwyczajony do pisania klauzuli SELECT tak samo jak klauzula GROUP BY (minus pola zagregowane). Kiedy natknąłem się na opisane powyżej zachowanie, zacząłem się zastanawiać, czy mogę na nich polegać w scenariuszach takich jak: wybierz wiersze z tabeli emp, w której pensja jest najniższa/najwyższa w dept. Np .: Instrukcje SQL, jak to działa na MySQL:
SELECT A.*, MIN(A.salary) AS min_salary FROM emp AS A GROUP BY A.dept
nie mogę znaleźć dowolny materiał opisujący dlaczego takie SQL działa, co ważniejsze, czy mogę liczyć na takie zachowanie konsekwentnie. Jeśli jest to rzetelne zachowanie, mogę uniknąć takich zapytań jak:
SELECT A.* FROM emp AS A WHERE A.salary = (
SELECT MAX(B.salary) FROM emp B WHERE B.dept = A.dept)
mógłbyś pisać jakim skutkiem masz nadzieję. GROUP BY zwraca jeden wiersz dla każdej unikalnej kombinacji kolumn GROUP BY. Ponieważ podałeś tylko jedną kolumnę, dept, zwróci ona tylko jeden wiersz na dept. Jeśli podasz w zapytaniu, czego potrzebujesz, ludzie mogą być w stanie pomóc więcej. –
Powiedz nam, czego oczekujesz, a będziemy mogli Ci pomóc. – Marius
moje przypuszczenie jest tym, który jest ostatnim wierszem każdej grupy –