1

Temat: COUNT i GROUP BY daje puste pola

Witam, mam problem który wygląda następująco: Mam zapytanie w postaci:

SELECT 
  CASE 
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'kuj.-pom%' THEN 'kujawsko - pomorskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'war.-maz%' THEN 'warmińsko - mazurskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'podlaskie%' THEN 'podlaskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'pomorskie%' THEN 'pomorskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'dolnośląskie%' THEN 'dolnośląskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'lubelskie%' THEN 'lubelskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'wielkopolskie%' THEN 'wielkopolskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'mazowieckie%' THEN 'mazowieckie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'opolskie%' THEN 'opolskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'śląskie%' THEN 'śląskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'łódzkie%' THEN 'łódzkie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'świętokrzyskie%' THEN 'świętokrzyskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'zach.-pom%' THEN 'zachodnio - pomorskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'malopolskie%' THEN 'małopolskie'
    ELSE jednostki_organizacyjne.nazwa_skrocona 
  END, 
  COUNT (jednostki_organizacyjne.nazwa_skrocona LIKE '%_dz') AS Dzieci,
  COUNT (jednostki_organizacyjne.nazwa_skrocona LIKE '%_d') AS Dorosli
FROM 
  public.pacjenci, 
  public.przyjecia, 
  public.jednostki_organizacyjne
WHERE 
  przyjecia.id_jednostki_organizacyjnej = jednostki_organizacyjne.id AND
  przyjecia.id_pacjenta = pacjenci.id
  AND jednostki_organizacyjne.nazwa_skrocona LIKE '%ZDLR%'
GROUP BY jednostki_organizacyjne.nazwa_skrocona
ORDER BY nazwa_skrocona

które daje w wyniku:

    nazwa_skrocona     | dzieci | dorosli 
-----------------------+--------+---------
 dolnośląskie          |      9 |       9
 dolnośląskie          |     64 |      64
 kujawsko - pomorskie  |     13 |      13
 kujawsko - pomorskie  |     45 |      45
 lubelskie             |     33 |      33
 lubelskie             |      5 |       5
 łódzkie               |     30 |      30
 łódzkie               |      4 |       4
 małopolskie           |      3 |       3
 małopolskie           |     59 |      59
 mazowieckie           |     57 |      57
 mazowieckie           |     14 |      14
 opolskie              |      8 |       8
 opolskie              |      6 |       6
 podlaskie             |      5 |       5
 śląskie               |     11 |      11
 śląskie               |      2 |       2
 świętokrzyskie        |     19 |      19
 warmińsko - mazurskie |     55 |      55
 warmińsko - mazurskie |      9 |       9
 wielkopolskie         |      4 |       4
 wielkopolskie         |     21 |      21
 zachodnio - pomorskie |      1 |       1
 zachodnio - pomorskie |     16 |      16
(24 rows)

Problem polega na tym, że zlicza mi wszystkie występienia a nie te, o które mi chodzi (czyli gdzie w "nazwa_skrocona" na końcu występuje '_dz' lub '_d'.
Jak powinno wyglądać prawidłowe zapytanie?

2

Odp: COUNT i GROUP BY daje puste pola

To chyba powinno wyglądać tak

SELECT
  CASE
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'kuj.-pom%' THEN 'kujawsko - pomorskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'war.-maz%' THEN 'warmińsko - mazurskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'podlaskie%' THEN 'podlaskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'pomorskie%' THEN 'pomorskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'dolnośląskie%' THEN 'dolnośląskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'lubelskie%' THEN 'lubelskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'wielkopolskie%' THEN 'wielkopolskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'mazowieckie%' THEN 'mazowieckie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'opolskie%' THEN 'opolskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'śląskie%' THEN 'śląskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'łódzkie%' THEN 'łódzkie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'świętokrzyskie%' THEN 'świętokrzyskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'zach.-pom%' THEN 'zachodnio - pomorskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'malopolskie%' THEN 'małopolskie'
    ELSE jednostki_organizacyjne.nazwa_skrocona
  END,
  SUM (case when jednostki_organizacyjne.nazwa_skrocona LIKE '%_dz' then 1 else 0 end) AS Dzieci,
  SUM (case when jednostki_organizacyjne.nazwa_skrocona LIKE '%_d' then 1 else 0 end) AS Dorosli
FROM
  public.pacjenci,
  public.przyjecia,
  public.jednostki_organizacyjne
WHERE
  przyjecia.id_jednostki_organizacyjnej = jednostki_organizacyjne.id AND
  przyjecia.id_pacjenta = pacjenci.id
  AND jednostki_organizacyjne.nazwa_skrocona LIKE '%ZDLR%'
GROUP BY CASE
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'kuj.-pom%' THEN 'kujawsko - pomorskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'war.-maz%' THEN 'warmińsko - mazurskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'podlaskie%' THEN 'podlaskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'pomorskie%' THEN 'pomorskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'dolnośląskie%' THEN 'dolnośląskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'lubelskie%' THEN 'lubelskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'wielkopolskie%' THEN 'wielkopolskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'mazowieckie%' THEN 'mazowieckie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'opolskie%' THEN 'opolskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'śląskie%' THEN 'śląskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'łódzkie%' THEN 'łódzkie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'świętokrzyskie%' THEN 'świętokrzyskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'zach.-pom%' THEN 'zachodnio - pomorskie'
    WHEN jednostki_organizacyjne.nazwa_skrocona LIKE 'malopolskie%' THEN 'małopolskie'
    ELSE jednostki_organizacyjne.nazwa_skrocona
  END
ORDER BY nazwa_skrocona

3

Odp: COUNT i GROUP BY daje puste pola

Dziękuję, dokładnie o to chodziło.
Pozdrawiam.