Skoro się uczysz, to warto byłoby od razu na początku uczyć się porządnych zapytań. W swoim pierwszym grupujesz po patient_id, czyli dla każdego pacjenta będziesz miał co najwyżej jeden rekord, jakiego więc wyniku oczekujesz w kolumnie opis? Przecież ten opis dotyczy jednego, konkretnego badania. Mysql w domyślnej konfiguracji taką składnię przyjmie, ale według standardu sql jest ona błędna. W tym przypadku first_name i last_name będą jeszcze poprawne, bo w kazdej grupie wszystkie są takie same, ale opis już będzie nieokreślony - mysql wypluje pierwszy z brzegu, który będzie miał pod ręką.
Proponuję poczytać:
http://dev.mysql.com/doc/refman/5.5/en/gro...en-columns.htmlPrawidłowe zapytanie powinno wyglądać tak:
SELECT p.id, p.first_name, p.last_name, e.exam_count
FROM patient AS p
JOIN
( SELECT patient_id, COUNT(*) AS exam_count
FROM exam
GROUP BY patient_id
HAVING exam_count > 2 ) AS e
ON p.id = e.patient_id
Takie zapytanie jest nie tylko poprawne, ale też bardziej wydajne, przy założeniu indeksu na patient_id w tabeli exam, ale ogólnie zewnętrzne klucze do innych tabel zawsze powinny być indeksowane. Co prawda przy małej bazie różnicy nie będzie, ale warto wyrobić sobie dobre nawyki. Łączenie kilku tabel i grupowanie po całości musi być wolniejsze, na połączonych tabelach nie ma możliwości wykorzystania indeksów do pomocy w grupowaniu, indeksy działają tylko w obrębie danej tabeli.