Mam tabelę "przedmioty" i chciałbym osiągnąć coś takiego:



Czyli wyciągnąć z wierszy 3 największe ceny z każdego działu w kolejności od największej do najmniejszej.

Sam wykombinowałem coś takiego:

  1. SELECT c1.dzial_id dzial_id, c1.cena cena1, c2.cena cena2, c3.cena cena3
  2. FROM (SELECT * FROM przedmioty ORDER BY cena DESC) c1
  3. LEFT JOIN (SELECT * FROM przedmioty ORDER BY cena DESC) c2 ON ( c1.dzial_id = c2.dzial_id && c1.id != c2.id )
  4. LEFT JOIN (SELECT * FROM przedmioty ORDER BY cena DESC) c3 ON ( c1.dzial_id = c3.dzial_id && c3.id != c1.id && c3.id != c2.id )
  5. GROUP BY c1.dzial_id


Mam jeszcze pomysł by dodać po prostu dodatkowe trzy kolumny i za pomocą trigger'ów je aktualizować.

I chciałbym się dowiedzieć czy może nie znacie jakiegoś lepszego rozwiązania.