DISTINCT MySQL vs PostgreSQL

2009-06-20 12:31

Pomagałem dzisiaj na IRCnet (#php.pl) w zapytaniu do bazy MySQL, które polegało na wybraniu rekordów z najmniejszą ceną pogrupowanych według wybranej kolumny. Bardzo szybko napisałem jak to ma wyglądać w PostgreSQL, ale niestety w MySQL użycie DISTINCT jest trochę ułomne.

Zacznijmy jednak od początku. Przykładowe rekordy w tabeli "cennik":

id data cena
1 2009-12-01 900
2 2009-12-01 900
3 2009-12-01 500
4 2009-12-02 800
5 2009-12-02 900
6 2009-12-05 700
7 2009-12-05 900
8 2009-12-05 500

Chcemy teraz wybrać jeden rekord z każdego dnia, który posiada najniższą cenę. W PostgreSQL wyglądać to będzie następująco:

Wszystko ślicznie, pięknie, natomiast w MySQL nie można użyć DISTINCT na wybranej kolumnie i jednocześnie zwrócić rekordów z kolumny, z której wartość została wyodrębniona. Trzeba się niestety posłużyć podzapytaniem i GROUP BY.

Zwracam uwagę na fakt, że sortowanie odbywa się w podzapytaniu. Gdyby było na zewnątrz najpierw rekordy zostałyby zgrupowane, a dopiero potem posortowane co uniemożliwiłoby wybranie najniższej ceny.

Dzisiaj krótki wpis, ale cieszę się, że znowu udało mi się coś napisać bo po (nie)dawnej zapowiedzi częstszego pisania dałem kolokwialnie pisząc dupy :). Pozwolę sobie jeszcze dać linka do poprzedniego wpisu gdzie też wyszły pewne różnice między MySQL i PostgreSQL.

Słowa kluczowe: PostgreSQL, Techblog, baza, mysql, sql, artykuł, blog

Projektowanie i tworzenie stron www w PHP5. Opisy i recenzje oprogramowania typu cms, blog, wiki, open source.
Wszelkie prawa zastrzeżone.