SQL (PostgreSQL): Gruppenweise ein LIMIT festlegen
Hallo,
ich habe Daten wie diese:
id | x
1 | a
3 | a
4 | b
5 | a
6 | b
10 | c
11 | b
12 | c
13 | d
Hiervon möchte ich die id's haben, aber nur maximal zwei (oder eine definierte andere Anzahl) pro Wert in Spalte x. Welche id's pro Spalte x Wert selektiert wird, soll zufällig sein (bei normalen Abfragen mit LIMIT gibt die Datenbank gewöhnlich das selbe Ergebnis zurück, das ist aber nicht gewollt)
Beispiel für ein gültiges Ergebnis:
id
1
3
4
6
10
12
13
aber auch das hier wäre gültig:
id
3
5
6
11
10
12
13
Was ich bisher rausgefunden habe ist, dass ich mit random() und einem LIMIT die Sortierung und das LIMIT angeben kann. Hier habe ich aber das Problem, dass das LIMIT für die gesamte Abfrage gilt, und nicht für jeden einzelnen Wert der Spalte x.
Alle ids, deren Spalte x Wert maximal 2 mal vorkommt kann ich einfach selektieren, komme aber bei dem zu limitierenden Teil nicht weiter.
Für Lösungshinweise wäre ich dankbar.
MfG
Thomas
ich habe Daten wie diese:
id | x
1 | a
3 | a
4 | b
5 | a
6 | b
10 | c
11 | b
12 | c
13 | d
Hiervon möchte ich die id's haben, aber nur maximal zwei (oder eine definierte andere Anzahl) pro Wert in Spalte x. Welche id's pro Spalte x Wert selektiert wird, soll zufällig sein (bei normalen Abfragen mit LIMIT gibt die Datenbank gewöhnlich das selbe Ergebnis zurück, das ist aber nicht gewollt)
Beispiel für ein gültiges Ergebnis:
id
1
3
4
6
10
12
13
aber auch das hier wäre gültig:
id
3
5
6
11
10
12
13
Was ich bisher rausgefunden habe ist, dass ich mit random() und einem LIMIT die Sortierung und das LIMIT angeben kann. Hier habe ich aber das Problem, dass das LIMIT für die gesamte Abfrage gilt, und nicht für jeden einzelnen Wert der Spalte x.
Alle ids, deren Spalte x Wert maximal 2 mal vorkommt kann ich einfach selektieren, komme aber bei dem zu limitierenden Teil nicht weiter.
Für Lösungshinweise wäre ich dankbar.
MfG
Thomas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 224635
Url: https://administrator.de/contentid/224635
Ausgedruckt am: 23.11.2024 um 18:11 Uhr
1 Kommentar