![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 516 Pomógł: 1 Dołączył: 25.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam, coś mam kłopot z poprawną konstrukcją zapytania, proszę o pomoc w temacie
mam tabelę tab1 id_tab1 | nazwisko | data 1 | Kowalski | 2016-08-04 2 | Maliniak | 2016-09-24 3 | Kowalski | 2016-10-05 4 | Stefaniak | 2016-11-04 oraz drugą tabelę tab2 id_tab2 | id_tab1 | ilosc 1 | 1 | 1 2 | 1 | 2 3 | 1 | 1 4 | 2 | 1 5 | 2 | 1 6 | 3 | 1 muszę podać wynik w postaci: - ilość wizyt poszczególnych klientów wg nazwisk - ilość zabiegów ograniczając do daty początkowej większej niż... wiem jak policzyć ilość wizyt:
próbowałem połączyć tabele JOIN-em, ale jeśli jest więcej rekordów niż jeden to źle mi zaczyna liczyć...... prosze o pomoc |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Połącz tak jak łączyłeś, albo poprzez WHERE.
Po WHERE z datą dodaj GROUP BY nazwisko |
|
|
![]()
Post
#3
|
|
Grupa: Opiekunowie Postów: 3 855 Pomógł: 317 Dołączył: 4.01.2005 Skąd: że ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 516 Pomógł: 1 Dołączył: 25.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
coś jest chyba nie tak, mam połączyć tabele poprzez identyfikator id_tab1 z identyfikatorem id_tab2?
chciałem zrobić to tak:
to mi da ilość wizyt
to mi da ilość zabiegów jeśli robię:
nawet bez warunków, to jeśli trafi na np trzy rekordy w tab2 to mnoży mi te ilości...... |
|
|
![]()
Post
#5
|
|
Grupa: Opiekunowie Postów: 3 855 Pomógł: 317 Dołączył: 4.01.2005 Skąd: że ![]() |
Moje zapytanie liczy ilość zabiegów (zlicza ilości z tab2).
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Łączysz przez id_tab1
Żadne podzapytania nie są potrzebne. Wszystko w jednym zapytaniu: połączenie przez JOIN/LEFT JOIN/WHERE, WHERE z datą, GROUP BY. |
|
|
![]()
Post
#7
|
|
Grupa: Opiekunowie Postów: 3 855 Pomógł: 317 Dołączył: 4.01.2005 Skąd: że ![]() |
Napisz, co zawierają obie tabele.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 516 Pomógł: 1 Dołączył: 25.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
dokładnie to:
tab1 id_tab1 | nazwisko | data 1 | Kowalski | 2016-08-04 2 | Maliniak | 2016-09-24 3 | Kowalski | 2016-10-05 4 | Stefaniak | 2016-11-04 tab2 id_tab2 | id_tab1 | ilosc 1 | 1 | 1 2 | 1 | 2 3 | 1 | 1 4 | 2 | 1 5 | 2 | 1 6 | 3 | 1 moim zdaniem Twoje zapytanie liczy ilośc rekordów zabiegów, ich ilość sum(ilosc) group by id_tab1 - to moim zdaniem liczy ilość zabiegów, jeśli dołożę do tab2 nazwisko - będzie lepiej? |
|
|
![]()
Post
#9
|
|
Grupa: Opiekunowie Postów: 3 855 Pomógł: 317 Dołączył: 4.01.2005 Skąd: że ![]() |
Wynik mojego zapytania:
Ja uważam, że masz źle skonstruowane tabele, bo pierwsza powinna zawierać tylko dane pacjenta a druga zabiegi... a jeszcze lepiej: 1. pacjenci 2. zabiegi 3. tablica łącząca rekordy tabel 1 i 2 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 516 Pomógł: 1 Dołączył: 25.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
Oczekiwałbym wyniku:
Powód edycji: [Kshyhoo]:
|
|
|
![]()
Post
#11
|
|
Grupa: Opiekunowie Postów: 3 855 Pomógł: 317 Dołączył: 4.01.2005 Skąd: że ![]() |
To by trzeba podzapytaniami robić. Lepiej zmienić konstrukcję tabel.
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Co przechowują poszczególne pola w tabeli tab2?
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 516 Pomógł: 1 Dołączył: 25.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
- id rekordu
- id rekordu wizyty - ilość zabiegów |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
To teraz powiedz na jakiej podstawie w Twojej tabeli Kowalski ma 5 zabiegów.
Pewnie na takiej podstawie, że powinieneś połączyć poprzez pole id_tab1, o czym pisałem wyżej. Tyle, że skąd u Ciebie ilość wizyt Stefaniaka, skoro w tabeli tab2 nie ma wartości 4 w polu id_tab4? Pewnie dlatego, że podałeś niepełne zawartości tabel...
A teraz rozjaśnij dlaczego wizyta Kowalskiego (id 1) jest rozbita na ilości: 1, 2, 1? Ten post edytował trueblue 21.11.2016, 23:03:52 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 516 Pomógł: 1 Dołączył: 25.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
i jeszcze male pytanie, dlaczego mam zwrotkę z zapytanie że kolumna t2.start jest nieznana?
jeśli usunę IF....... to mam daty poprawne, ale muszę później filtrować po sezonie |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
`t2`.`start` albo t2.`start`
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 516 Pomógł: 1 Dołączył: 25.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
ok bez warunku sezon='2016/2017' działa, ale z warunkiem już nie....
|
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
W klauzuli WHERE nie można używać warunku opartego o alias.
Musisz powtórzyć całe obliczenie, albo zastosuj tam krótszy warunek oparty o YEAR(). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 07:32 |