Re: [pgsql-de-allgemein] AW: [pgsql-de-al lgemein] Gruppenweise Anzahl der Datensätze be grenzen

Thomas Uzunoff <[email protected]> Wed, 18 Dec 2013 17:35:42 +0100
Newsgroups gmane.comp.db.postgresql.german
Message-ID <[email protected]>
Danke, hat funktioniert :)


Am 18.12.2013 16:15, schrieb Andreas Kretschmer - internet24 GmbH:
>
>
>> -----Ursprüngliche Nachricht-----
>> Von: [email protected] [mailto:pgsql-de-allgemein-
>> [email protected]] Im Auftrag von Thomas Uzunoff
>> Gesendet: Mittwoch, 18. Dezember 2013 16:10
>> An: [email protected]
>> 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:    [email protected]
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.



-- 
Sent via pgsql-de-allgemein mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-de-allgemein