Привет, я не уверен, как лучше всего это задать, но я успешно выполнил два SQL-запроса, которые по отдельности получают результаты, которые я ищу. Однако я хотел бы добавить / объединить в основном два результата вместе, но поскольку я новичок в SQL, я не уверен, какой метод использовать. Я пробовал Union, но это не работает, поскольку для обеих таблиц требуется одинаковое количество столбцов. Также пробовал левое соединение, но это дает мне общую синтаксическую ошибку (может быть, от моего имени, опять же, я новичок в этом).
1-й ЗАПРОС
SELECT prac.healthPracID, prac.firstName, prac.surname
FROM healthpractitioners as prac
2-й ЗАПРОС
select count(treatmentrecords.nickname) as patients
from treatmentrecords
group by treatmentrecords.healthpracID;
В качестве альтернативы, может ли кто-нибудь помочь мне переписать эти утверждения, чтобы добиться того же результата в одном запросе. Я пробовал что-то подобное раньше и сделал следующее (но это не дало правильного результата - казалось, что у меня было такое же количество пациентов, и все имя и фамилия были только первыми из таблицы практикующего врача, но повторялись ):
SELECT prac.healthPracID, prac.firstName, prac.surname,
count(treatmentrecords.nickname) as patients
FROM healthpractitioners as prac, treatmentrecords
group by treatmentrecords.healthpracID;
Заранее спасибо, извините, если это уже было опубликовано раньше, я очень запутался в этом и не знал, как лучше его искать.
PS Я запускаю MySQL Workbench в Windows, если это имеет значение. Сэм.
Ваша вторая попытка находится на правильном пути, но в ней отсутствует условие соединения, а также вы должны группироваться по healthpractioners#healthPracID
.
SELECT
p.healthPracID,
p.firstName,
p.surname,
COUNT(t.healthPracID) AS num_patients
FROM healthpractioners p
LEFT JOIN treatmentrecords t
ON p.healthPracID = t.healthPracID
GROUP BY
p.healthPracID;
В этом ответе предполагается, что healthPracID
является либо первичным ключом в healthpractioners
, либо имеет уникальный индекс. В этом случае мы можем просто сгруппировать по healthPracID
. Если нет, то нам придется использовать следующий GROUP BY
:
GROUP BY
p.healthPracID,
p.firstName,
p.surname
Да, это все, что я действительно изменил. Самая большая проблема, с которой вы столкнулись, - это порядок присоединения.
Еще раз спасибо, как мне отметить вопрос как решенный / лучший ответ?
Попробуйте следующее:
SELECT prac.healthPracID, prac.firstName, prac.surname,
count(treat.nickname) as patients
FROM healthpractitioners as prac LEFT JOIN treatmentrecords AS treat
ON prac.healthPracID = treat.healthPracID
GROUP BY prac.healthPracID, prac.firstName, prac.surname
Используйте общие поля из обеих таблиц для выполнения LEFT JOIN
, а затем используйте агрегированную функцию COUNT
для нужного столбца, а остальные столбцы укажите в GROUP BY
.
Да, я сделал это, и это работает !! СПАСИБО БОЛЬШОЕ!! healthPracID - это первичный ключ, поэтому просто чтобы понять, что вы сделали, это добавили условие соединения и группу по healthpracID в таблице healthpracitioners вместо группировки по healthpracID в таблице treatmentrecords? Еще один вопрос: когда вы используете левое соединение, вы должны указать условие для одинаковых столбцов? почему именно это? Мне немного любопытно, почему.