@alex4answ

Как построить sql запрос к 3 таблицам?

3 таблицы:
client:
id | first_name | last_name
sale (продажи):
id | client_id | good_id | status_id
status:
id | name
нужно вернуть результат:
Имя клиента, кол-во его заказов с status.name = "new"
мой запрос (он работает):
select c.first_name, c.last_name, count(1) from status as st
inner join sale on sale.status_id = st.id
inner join `client` as c on c.id = sale.client_id
where st.name = "new"
group by c.id;

не уверен, что это правильно
1. Я начинаю с таблицы статуса, достаю статусы (где name = "new")
2. Затем достаю все продажи (где status_id = status.id)
3. Далее достаю клиентов (где id = sale.client_id)
Более правильным мне кажется, сначала нужно доставать таблицу заказов, потом клиенты и статусы, но не совсем понимаю как это связать.
  • Вопрос задан
  • 86 просмотров
Решения вопроса 2
LaRN
@LaRN
Senior Developer
Тут ошибка в использовании группировки
В группировку (group by) нужно включать все столбцы из select к которым не применены агрегирующие функции.
Т.е. вместо group by c.id нужно group by c.first_name, c.last_name;
Ответ написан
VicTHOR
@VicTHOR
(╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
Мне нужно вернуть результат:
Имя клиента, кол-во его заказов с status.name = "new"

SELECT c.first_name, c.last_name, count(s.id) as sale_count
    FROM `sale` s
    JOIN `client` c ON s.client_id = c.id
    JOIN `status` st ON s.status_id = st.id
        AND st.name = "new"
    GROUP BY c.first_name, c.last_name
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы