• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak policzyć NULL przez COUNT?

Object Storage Arubacloud
+1 głos
463 wizyt
pytanie zadane 24 października 2021 w SQL, bazy danych przez Beginner555 Obywatel (1,760 p.)

Cześć,

Mam wykonać zapytanie: Wypisać nazwę departamentu oraz liczbę osób w danym departamencie zatrudnionych. Jeśli w jakimś departamencie nikt nie pracuje, to powinno pojawić się 0 jako liczba osób. 

SELECT d.nazwa, COUNT(p.id_pracownika)
FROM Departament d, Pracownik p 
WHERE d.nr_departamentu=p.nr_departamentu
GROUP BY d.nazwa;

Narazie mam coś takiego i w tym problem, że liczy poprawnie w departamentach gdzie są pracownicy a pomija te wartości NULL i nie zamienia na 0. Nie wiem niestety jak to zrobić :(  Za pomoc Dziękuję z góry!

2 odpowiedzi

0 głosów
odpowiedź 24 października 2021 przez Mihoteo Bywalec (2,420 p.)
wybrane 24 października 2021 przez Beginner555
 
Najlepsza

Ja bym spróbował takiego zapytania:
 

SELECT d.nazwa, COUNT(p.id_pracownika)
FROM (Departament d
LEFT JOIN Pracownik p ON d.nr_departamentu=p.nr_departamentu)
GROUP BY d.nazwa;

Miałem podobny problem przy jednym projekcie i left join załatwił sprawę.

komentarz 24 października 2021 przez Beginner555 Obywatel (1,760 p.)
Twój sposób prawie działa, tylko jednego departamentu nie uwzględnia, nie wiem dlaczego.
komentarz 24 października 2021 przez Mihoteo Bywalec (2,420 p.)

@Baginner555, Bez większego wglądu w strukture tabeli czy rekordów ciężko mi jest cokolwiek więcej doradzić :/

komentarz 24 października 2021 przez Beginner555 Obywatel (1,760 p.)
SORKI, jednak działa. Źle spojrzałem tam nazwy departamentów się dublują. Mój błąd.

Dzięki za pomoc ;)
komentarz 24 października 2021 przez PreZmyK Pasjonat (21,470 p.)
To rozwiązanie nie pokaże pracowników, którzy nie są przypisani do jakiegokolwiek departamentu. Jeżeli dpartment_id nie może być NULL, to jest ok.
komentarz 25 października 2021 przez Mihoteo Bywalec (2,420 p.)
Możliwe, jednak w treści zadania napisał: " Wypisać nazwę departamentu oraz liczbę osób w danym departamencie zatrudnionych." Czyli chce liczyć tylko użytkowników przypisanych do jakiegoś departamentu. Ale zakładam, że jest to szkolne zadanie więc takich szczegółów już nie będą sprawdzać. Dane pewnie muszą być spójne więc nie powinno być sytuacji, że ktoś nie jest gdzieś przypisany albo coś :D
0 głosów
odpowiedź 24 października 2021 przez Wiciorny Ekspert (270,110 p.)

może określić warunek w where and -> p.id_pracownika is null ? 

WHERE d.nr_departamentu=p.nr_departamentu and p.id_pracownika IS NULL

tak, żeby po prostu zliczył wystąpienia rekordów dla których np to id jest nullem, lub wartości określone tam gdzie chcesz sa null. W tej stytuacji jednak bedzie problem gdyż zliczy tylko dla dwóch warunków, istnieje alternatywa z wykorzystaniem OR - zamiast END 
 

Jeśli w jakimś departamencie nikt nie pracuje

uwzględnić w takim razie tutaj warunek żeby zliczać rekordy w sytuacji kiedy wartość tutaj jest null jako OR bardziej niż AND  

1
komentarz 24 października 2021 przez Beginner555 Obywatel (1,760 p.)
Niestety, to zapytanie będzie działało tak, że będzie teraz brać pod uwagę wiersze z wartością NULL i tak niestety też nie będzie traktowało NULL jako 0. Trzeba wymyślić coś innego.

Podobne pytania

0 głosów
2 odpowiedzi 3,442 wizyt
pytanie zadane 3 kwietnia 2017 w JavaScript przez Alterwar Dyskutant (7,650 p.)
+1 głos
3 odpowiedzi 777 wizyt
pytanie zadane 17 czerwca 2021 w SQL, bazy danych przez manjaro Nałogowiec (37,390 p.)
+1 głos
1 odpowiedź 194 wizyt
pytanie zadane 8 października 2020 w SQL, bazy danych przez Mateusz Kita Początkujący (380 p.)

92,568 zapytań

141,422 odpowiedzi

319,640 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...