Das folgende Beispiel bezieht sich auf die Datenbasis meines ersten Post zu "Analytischen Funktionen".
Es geht darum, dass für das Jahr 2014 drei Gruppen (mit einem Hash-Wert je Gruppe) gebildet werden müssen.
Gruppe 1:
- 3 zufällig ausgewählte Bundesländer die mit B anfangen
Gruppe 2:
- 3 zufällig ausgewählte Bundesländer die mit S anfangen
Gruppe 3:
- 3 zufällig ausgewählte Bundesländer die NICHT mit B und S anfangen
Hier das dafür notwendige SQL:
Im Endeffekt wird mit Hilfe der ROW_NUMBER() Funktion und DBMS_RANDOM.VALUE Funktion eine zufällige Verteilung geschaffen.
Es geht darum, dass für das Jahr 2014 drei Gruppen (mit einem Hash-Wert je Gruppe) gebildet werden müssen.
Gruppe 1:

Gruppe 2:
- 3 zufällig ausgewählte Bundesländer die mit S anfangen
Gruppe 3:
- 3 zufällig ausgewählte Bundesländer die NICHT mit B und S anfangen
Hier das dafür notwendige SQL:
SELECTErgebnis:
BUNDESLAND,
EINWOHNER,
GRUPPE,
/* Hash Generierung */
DBMS_CRYPTO.HASH (UTL_RAW.CAST_TO_RAW (GRUPPE||'XYZ'), 1) AS HASH_WERT
FROM (
SELECT
JAHR,
BUNDESLAND,
EINWOHNER,
/* Gruppe definieren */
CASE
WHEN BUNDESLAND LIKE 'B%'
THEN 1
WHEN BUNDESLAND LIKE 'S%'
THEN 2
ELSE 3
END AS GRUPPE,
/* Zufällige Sortierung innerhalb der Gruppe */
ROW_NUMBER() OVER (
PARTITION BY
CASE
WHEN BUNDESLAND LIKE 'B%'
THEN 1
WHEN BUNDESLAND LIKE 'S%'
THEN 2
ELSE 3
END
ORDER BY DBMS_RANDOM.VALUE(1,10)
) AS RN
FROM AS_EINWO_BUNDESL_JAHR
WHERE JAHR = 2014
)
WHERE RN <= 3
ORDER BY GRUPPE, BUNDESLAND
/*
Nicht vergessen bei der Verwendung von DBMS_CRYPTO.HASH:
grant execute on sys.dbms_crypto to APEX_SCHEMA;
*/
BUNDESLAND | EINWOHNER | GRUPPE | HASH_WERT |
---|---|---|---|
Baden-Württemberg | 10666000 | 1 | C5B1DF1A52DCC34C648FC79804F49A0A |
Bayern | 12643000 | 1 | C5B1DF1A52DCC34C648FC79804F49A0A |
Bremen | 659000 | 1 | C5B1DF1A52DCC34C648FC79804F49A0A |
Sachsen | 4045000 | 2 | 38FAEEE9CD02869F273DE5A44CF75218 |
Sachsen-Anhalt | 2238000 | 2 | 38FAEEE9CD02869F273DE5A44CF75218 |
Schleswig-Holstein | 2819000 | 2 | 38FAEEE9CD02869F273DE5A44CF75218 |
Hamburg | 1762000 | 3 | 7DA2D9ED3366BAEA4B1FA0D6269F7F9F |
Mecklenburg-Vorpommern | 1594000 | 3 | 7DA2D9ED3366BAEA4B1FA0D6269F7F9F |
Rheinland-Pfalz | 3996000 | 3 | 7DA2D9ED3366BAEA4B1FA0D6269F7F9F |
Im Endeffekt wird mit Hilfe der ROW_NUMBER() Funktion und DBMS_RANDOM.VALUE Funktion eine zufällige Verteilung geschaffen.