Как объединить две функции SQL?

#sql

Вопрос:

У меня есть 2 бита написанного SQL-кода, которые мне нужно объединить. Однако я не могу прийти к правильному решению.

Запрос № 1:

 SELECT name  FROM payment_method;   

Запрос № 2:

 SELECT COUNT(*)  FROM orders  GROUP BY payment_method_id;   

В окончательном коде должно быть указано общее количество для каждого платежа (сколько раз был использован каждый платеж).

Мой код показывает таблицу, в которой перечислены все имена, но вместо подсчета платежей с одинаковым идентификатором он учитывает все методы оплаты, которые показаны во второй таблице.

В чем именно проблема?

Мой окончательный код:

 SELECT name, COUNT(*) AS orders FROM payment_method JOIN orders ON payment_method_id  GROUP BY name;   

payment_method таблица содержит идентификатор и имя

orders таблица содержит идентификатор, payment_method_id и payment_completed_date

Ответ №1:

Когда вы соединяете таблицы, вам необходимо определить отношение, как таблицы должны быть соединены. кроме того, рекомендуется использовать псевдонимы таблиц в случае, если они имеют общие имена некоторых столбцов.

 SELECT   p.name, COUNT(o.id) AS orders_count FROM   payment_method p JOIN   orders o ON o.payment_method_id = p.id GROUP BY   o.payment_method_id;  

Комментарии:

1. Я бы СГРУППИРОВАЛСЯ ПО p.name вместо этого.

2. @jarlh есть ли какая-то польза?

3. Допустимая группа по. Будет переносим в более строгие (т. е. правильные) базы данных.