Abfrage den höchsten Rang der einzelnen Elemente

Habe ich die(vereinfacht) Folgendes Modell:

Book
  id
  name

BookCategory
  book_id
  category_id
  rank

Category
  id
  name

Mit einer bestimmten Kategorie-id, ich würde gerne die Bücher mit, die Kategorie mit dem höchsten Rang.

Ich gebe Ihnen ein Beispiel, um deutlicher zu sein:

Book   

id    name   
---  -------
1     On Writing
2     Zen teachings
3     Siddharta

BookCategory   

book_id category_id      rank   
---       -------        -----
1        2               34.32
1        5               24.23
1        9               54.65
2        5               27.33
2        9               28.32
3        2               30.43
3        5               27.87

Category   

id    name   
---  -------
2     Writing
5     Spiritual
9     Buddism

Das Ergebnis für category_id = 2 wäre, das Buch mit der id = 3.

Dies ist die Abfrage, die ich gelaufen bin:

SELECT book."name" AS bookname
FROM bookcategory AS bookcat
LEFT JOIN book ON bookcat."book_id" = book."id" 
LEFT JOIN category cat ON bookcat."category_id" = cat."id" 
WHERE cat."id" = 2
ORDER BY bookcat."rank"

Dies ist nicht der richtige Weg, es zu tun, weil Sie nicht wählen Sie den max Rang jedes Buch. Ich habe noch um zu finden eine passende Lösung.

Hinweis: ich verwende die postgresql-version 9.1.

Edit:

DB-Schema (entnommen aus martin ' s SQL Fiddle Antwort):

create table Book (
  id int,
  name varchar(16)
  );

insert into Book values(1, 'On Writing');
insert into Book values(2, 'Zen teachings');
insert into Book values(3, 'Siddharta');

create table BookCategory (
  book_id int,
  category_id int,
  rank real
  );

insert into BookCategory values(1,2,34.32);
insert into BookCategory values(1,5,24.23);
insert into BookCategory values(1,9,54.65);
insert into BookCategory values(2,5,27.33);
insert into BookCategory values(2,9,28.32);
insert into BookCategory values(3,2,30.43);
insert into BookCategory values(3,5,27.87);

create table Category (
  id int,
  name varchar(16)
  );

insert into Category values(2, 'Writing');
insert into Category values(5,'Spiritual');
insert into Category values(9,    'Buddism');
Wenn man zeigen könnte, wird die Tabelle Struktur und die Daten für dein Beispiel als CREATE TABLE und INSERT Aussagen, die Menschen könnten kopieren und einfügen, um eine test-Datenbank ausprobieren von Lösungen vor der Veröffentlichung.

InformationsquelleAutor Rod0n | 2012-08-08

Schreibe einen Kommentar