@abrakadaber
Ad. 1. Owszem to działa z MySQLem. Nurtuje mnie jednak dlaczego mysql nie zalicza się do baz NORMALNYCH?
Ad. 2. W mojej podpowiedzi znalazło się distinct tylko dlatego ze skopiowałem zapytanie z postu wyzej i dodałem jedynie GBy na koncu. To zapytanie zwraca dane jakich oczekuje @olek1, działa również na postgresie (chyba ze ta baza również nie zalicza się do normalnych). Na oby wymienionych przeze mnie bazach to zapytanie działa poprawnie zarowno z distinct jak i bez (moje niedopatrzenie ze nie usunałem go po skopiowaniu).
Postgres 9.2
DDL:
CREATE TABLE grupy
(
id_grupy serial NOT NULL,
nazwa character varying(25),
CONSTRAINT grupy_pkey PRIMARY KEY (id_grupy)
)
dane:
id |
nazwa |
1 |
ABC |
2 |
ABC |
3 |
ABC |
4 |
BBB |
5 |
BBB |
6 |
CCC |
7 |
DDD |
8 |
EEE |
9 |
EEE |
zapytanie 1
SELECT DISTINCT id_grupy, nazwa FROM grupy GROUP BY nazwa
SELECT id_grupy, nazwa FROM grupy GROUP BY nazwa
wynik:
BŁĄD: kolumna "grupy.id_grupy" musi występować w klauzuli GROUP BY lub być użyta w funkcji agregującej
LINE 1: SELECT DISTINCT id_grupy, nazwa FROM grupy GROUP BY nazwa
i taki komunikat wyświetla normalna baza. W normalnych bazach jeśli jest słowo group by
to po nim MUSZĄ być WSZYSTKIE kolumny, które nie są w żaden sposób agregowane. MySQL jest bazą w sam raz pod kolejny CMS albo stronę - jako storage dla PHP. Jest w nim tyle udziwnień i odstępstw od standardu, że nic tylko siąść i płakać.
zapytanie 2
SELECT DISTINCT id_grupy, nazwa FROM grupy GROUP BY nazwa, id_grupy
wynik:
id |
nazwa |
1 |
ABC |
2 |
ABC |
3 |
ABC |
4 |
BBB |
5 |
BBB |
6 |
CCC |
7 |
DDD |
8 |
EEE |
9 |
EEE |
czyli trochę nie bardzo |
|
zapytanie 2
SELECT MIN(id_grupy), nazwa FROM grupy GROUP BY nazwa
wynik:
id |
nazwa |
1 |
ABC |
4 |
BBB |
6 |
CCC |
7 |
DDD |
8 |
EEE |
Czyli to co miało być. Zamiast Min może być Max , Sum , ... |
|