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

Zliczanie wierszy z drugiej tabeli w MySQL

VPS Starter Arubacloud
0 głosów
837 wizyt
pytanie zadane 30 września 2018 w SQL, bazy danych przez halotelefonek Bywalec (2,410 p.)
edycja 30 września 2018 przez halotelefonek
Witam. Mam 2 tabele : c (czlonkowie) i wplaty. W tabeli wplaty co roku dochodzi jeden rekord dla czlonka ale problem mam ze zliczaniem ile rekordów z wpłatą jest dla danego członka.

po zapytaniu :

select c.id, c.imie, c.nazwisko, c.miejscowosc, c.rok_przyjecia, COUNT(wplaty.id_czlonka) AS ilosc_wplat
                        from czlonkowie as c, wplaty where c.id = wplaty.id_czlonka order by miejscowosc asc

Wyświetla mi tylko 1 rekord (jednego członka któremu zlicza wszystkie wpłaty jakie były w tabeli)

Chodzi mi o to żeby zliczał rekordy należące do danego członka, czyli członek 1 - ilosc_wplat = 4

czlonek drugi - ilosc_wplat = 3

Z góry dzięki za pomoc :)

1 odpowiedź

0 głosów
odpowiedź 30 września 2018 przez jeremus Maniak (59,720 p.)
edycja 30 września 2018 przez jeremus

musisz skorzystać ze składni  "group by"

np.

jeśli tylko id członka i ilości to wystarczy tak :

select id_czlonka, count(*) from wplaty group by id_czlonka

a jak chcesz mieć nazwiska i ilosci np. 

select max(c.nazwisko), count(*) as ile  from czlonkowie c,wplaty w  where c.id=w.id_czlonka  group by w.id_czlonka

jełśi chcesz mieć w wyniku więcej wartości z tabeli czlonkowie to powyzsze zapytanie nie jest zbyt elegancie  bo muszą zostać użyte funkcje agregujące , wtedy najlepiej wykorzystać wynik podzapytania - pierwszy sql  w składni with . ale to w mssql , natomiast w mysql od jakiejsc wersji( nie pamiętam) , albo czegoś innego typowego dla mysql'a 

przykład z with : ( w wersji 8 mysql na pewno jest )

with d 
as
(select id_czlonka,count(*) as ile  from wplaty group by id_czlonka
)
select c.*,d.ile from czlonkowie c,d where c.id=d.id_czlonka

 

komentarz 30 września 2018 przez halotelefonek Bywalec (2,410 p.)

Użyłem takiego zapytania : 

select wplaty.id_czlonka as id,  czlonkowie.imie, czlonkowie.nazwisko, czlonkowie.miejscowosc, COUNT(rok_wplaty) AS ilosc_wplat
from wplaty, czlonkowie  where czlonkowie.id = wplaty.id_czlonka GROUP BY id_czlonka ORDER BY czlonkowie.miejscowosc asc

i byłoby super gdyby wyświetlał mi jeszcze rekordy z bazy członkowie, którzy nie mają żadnego rekordu w bazie wplaty jako liczba 0, a on je pomija

 

Z góry dzięki za pomoc

komentarz 30 września 2018 przez jeremus Maniak (59,720 p.)

a to ciekawe że mysql nie potrzeba funkcji agregującej..

skoro tak to twój problem załatwi ;

select wplaty.id_czlonka as id,  czlonkowie.imie, czlonkowie.nazwisko, czlonkowie.miejscowosc, COUNT(rok_wplaty) AS ilosc_wplat
from  czlonkowie left join wplaty  on czlonkowie.id = wplaty.id_czlonka GROUP BY id_czlonka ORDER BY czlonkowie.miejscowosc asc

 

Podobne pytania

0 głosów
2 odpowiedzi 592 wizyt
pytanie zadane 14 marca 2016 w SQL, bazy danych przez niezalogowany
0 głosów
0 odpowiedzi 87 wizyt
pytanie zadane 20 października 2023 w SQL, bazy danych przez Piotrek2713 Mądrala (5,320 p.)
0 głosów
1 odpowiedź 129 wizyt
pytanie zadane 26 listopada 2019 w SQL, bazy danych przez DanexZ Obywatel (1,270 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...