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:
- 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:
SELECT
  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; 
*/
Ergebnis:
| 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.