Re: [pgsql-de-allgemein] AW: [pgsql-de-allgemein] Gruppenweise Anzahl der Datensätze begrenzen

From: Thomas Uzunoff <postgresql(at)grizzlycrm(dot)de>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: [pgsql-de-allgemein] AW: [pgsql-de-allgemein] Gruppenweise Anzahl der Datensätze begrenzen
Date: 2013-12-18 16:35:42
Message-ID: 52B1CEDE.2010509@grizzlycrm.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Danke, hat funktioniert :)

Am 18.12.2013 16:15, schrieb Andreas Kretschmer - internet24 GmbH:
>
>
>> -----Ursprüngliche Nachricht-----
>> Von: pgsql-de-allgemein-owner(at)postgresql(dot)org [mailto:pgsql-de-allgemein-
>> owner(at)postgresql(dot)org] Im Auftrag von Thomas Uzunoff
>> Gesendet: Mittwoch, 18. Dezember 2013 16:10
>> An: pgsql-de-allgemein(at)postgresql(dot)org
>> Betreff: [pgsql-de-allgemein] Gruppenweise Anzahl der Datensätze
>> begrenzen
>>
>> Hallo,
>>
>> ich habe eine Tabelle wie diese mit den Spalten id und x. Spalte id ist
>> PK.
>>
>> 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 | x
>> -----------
>> 1 | a
>> 3 | a
>> 4 | b
>> 6 | b
>> 10 | c
>> 12 | c
>> 13 | d
>>
>> aber auch das hier wäre gültig:
>>
>> id | x
>> -----------
>> 3 | a
>> 5 | a
>> 6 | b
>> 11 | b
>> 10 | c
>> 12 | c
>> 13 | d
>>
>> Was ich bisher herausgefunden 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 id's, deren Spalte x Wert maximal 2 mal vorkommt kann ich auch
>> einfach selektieren. Wenn es aber mehr als 2 (oder eine zu definierende
>> Anzahl) und dadurch die Anzahl der Ergebnisse eingeschränkt werden
>> müsste, komme nicht weiter.
>>
>> Für Lösungshinweise wäre ich dankbar.
>>
>> Grüße
>>
>> Thomas
>
> test=*# select x, id, row_number() over (partition by x order by random()) from thomas ;
> x | id | row_number
> ---+----+------------
> a | 3 | 1
> a | 5 | 2
> a | 1 | 3
> b | 4 | 1
> b | 6 | 2
> b | 11 | 3
> c | 10 | 1
> c | 12 | 2
> d | 13 | 1
> (9 rows)
>
> test=*# select x, id from (select x, id, row_number() over (partition by x order by random()) from thomas) foo where row_number <= 2 ;
> x | id
> ---+----
> a | 5
> a | 1
> b | 11
> b | 6
> c | 10
> c | 12
> d | 13
> (7 rows)
>
>
>
> Mit freundlichen Grüssen
>
> Andreas Kretschmer
> - 2nd-Level Support -
>

--
GrizzlyCRM
Thomas Uzunoff
Inhaber
Barbarossastr. 15
53721 Siegburg

Telefon: 089 21551939
Mobil: 0163 8346340
E-Mail: tu(at)grizzlycrm(dot)de
URL: www.grizzlycrm.de
USt-IdNr.: DE276930532

Diese E-Mail kann rechtlich geschützte und/oder vertrauliche Informationen enthalten. Sollten Sie nicht der richtige Adressat sein oder irrtümlich diese E-Mail erhalten haben, vernichten Sie diese E-Mail und benachrichtigen Sie den Absender. Weitergabe und Kopie an Unbefugte ist untersagt.

AGB: http://www.grizzlycrm.de/agb

This e-mail may contain proprietary and / or confidential information. If you are not the intended recipient or have received this email by mistake, please delete this e-mail and notify the sender. Transfer and copy is prohibited to unauthorized.

In response to

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Andreas Kretschmer 2013-12-18 17:43:48 disable trigger ALL
Previous Message Andreas Kretschmer - internet24 GmbH 2013-12-18 15:15:04 AW: [pgsql-de-allgemein] Gruppenweise Anzahl der Datensätze begrenzen