ďťż
 
Wybór unikalnych rekordów ďťż
 
Wybór unikalnych rekordów
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Wybór unikalnych rekordów



Marek - 13-11-2006 00:45
Wybór unikalnych rekordów
  Witam,

Mam chyba przyćmienie. Chcę wybrać produkt po 1 z danej kategorii a wynik
posortować alfabetycznie w/g nazwy produktu. Nie mam pojęcia jak to
zrobić... (PostgreSQL)

CREATE TABLE produkt
(
....
category_id int4,
name varchar(200)
)

--
Pozdrawiam,
Marek





Paweł Matejski - 13-11-2006 00:45

  Marek wrote:
> Witam,
>
> Mam chyba przyćmienie. Chcę wybrać produkt po 1 z danej kategorii a
> wynik posortować alfabetycznie w/g nazwy produktu. Nie mam pojęcia jak
> to zrobić... (PostgreSQL)

DISTINCT ON

--
P.M.




Marek - 13-11-2006 00:45

  > DISTINCT ON

No właśnie to nie działa gdyż DISTINCT ON wymaga podania w ORDER BY w tej
samej nazw kolumn. Więc jeśli chcę DISTINCT ON (category_id) to muszę
zastosować ORDER BY category_id, name a nie tak jak bym chciał ORDER BY
name, category_id. Wywala mi błąd przy odwróceniu tej kolejności.




Marek - 13-11-2006 00:45

  PS

Poradziłem sobie lecz nie wiem czy jest to rozsądne posunięcie, choć w
kontekscie Twojej odpowiedzi na moje pytanie zadane w innym wątku - może byc
to słuszne podejście. Otóż obejście jest następujące:

SELECT * FROM produkt WHERE produkt_id IN
(
SELECT DISTINCT ON (category_id) produkt_id FROM produkt WHERE ...

) ORDER BY name;

Pytanie zewnętrzne jest tylko protezą na obejście braku mozliwości
posortowania w/g nazwy.





Paweł Matejski - 13-11-2006 00:45

  Marek wrote:
> No właśnie to nie działa gdyż DISTINCT ON wymaga podania w ORDER BY w tej
> samej nazw kolumn. Więc jeśli chcę DISTINCT ON (category_id) to muszę
> zastosować ORDER BY category_id, name a nie tak jak bym chciał ORDER BY name,
> category_id. Wywala mi błąd przy odwróceniu tej kolejności.

I dlatego warto pisać zapytanie które się już zrobiło a nie działa tak jakbyś
chciał.

> PS
>
> Poradziłem sobie lecz nie wiem czy jest to rozsądne posunięcie, choć w
> kontekscie Twojej odpowiedzi na moje pytanie zadane w innym wątku - może
> byc to słuszne podejście. Otóż obejście jest następujące:
>
> SELECT * FROM produkt WHERE produkt_id IN
> (
> SELECT DISTINCT ON (category_id) produkt_id FROM produkt WHERE ...
>
> ) ORDER BY name;
>
> Pytanie zewnętrzne jest tylko protezą na obejście braku mozliwości
> posortowania w/g nazwy.

Ja bym to zrobił tak:

select * from (
SELECT DISTINCT ON (category_id) * FROM produkt WHERE ...
ORDER by category_id, <tu może być ważne> ) a
order by name

A ten order wewnętrzny może być ważny, bo to on decyduje, który produkt zostanie
wybrany z danej kategorii.

--
P.M.




Marek - 13-11-2006 00:45

  Super ! Dzięki raz jeszcze ! :-)
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?= [MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?= Jak =?ISO-8859-2?Q?zamieni=E6_dwa_pola_jednej_kolumny_?==?ISO-8859-2?Q?w_dw=F3ch_rekordach_za_pomoc=B1_jednego_zapyt? ==?ISO-8859-2?Q?ania=3F?= =?ISO-8859-2?Q?WY=B6wietlenie_rekord=F3w_pocz=B1wszy_od_?==?I SO-8859-2?Q?danej_litery=2E=2E=2E?= =?iso-8859-2?Q?=5BMySQL=5D_Wy=B6wietlenie_wszystkich_rekordow _zawierajacy?==?iso-8859-2?Q?ch_duplikat_a__moze_inna_struktura_bazy_danych ?= [pgsql] Akcja w =?iso-8859-2?b?emFsZb9ub7ZjaQ==?= od liczby zmienionych =?iso-8859-1?q?rekord=F3w?= [postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?= [mysql] Wyszukanie =?ISO-8859-2?Q?rekord=F3w=28powiazane_tabel?==?ISO-8859-2?Q?e=29?= [MySQL]: Dodanie zliczania =?ISO-8859-2?Q?rekord=F3w_do_rozb?==?ISO-8859-2?Q?udowanego_zapytania?= Liczba =?ISO-8859-2?Q?odpowiadaj=B1cych_rekord=F3w_z_drugi?==?ISO-8859-2?Q?ej_tabeli?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • numervin.keep.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com