Правильный способ - использовать явное JOIN
:
SELECT d.name, d.dept, SUM(s.quantity) as TotalQuantity
FROM dept d JOIN
sale s
ON d.dept = s.dept
GROUP BY d.name, d.dept
ORDER BY TotalQuantity;
Если вы хотите, чтобы все строки из dept
, даже без продаж, использовали LEFT JOIN
.
Обратите внимание на использование псевдонимов таблиц и квалифицированных ссылок на столбцы. Это лучшие практики, когда запрос ссылается на несколько таблиц.
Я бы никому не советовал использовать запятую в предложении FROM
. Это просто плохая форма. Вы можете использовать подзапрос, если хотите:
SELECT (SELECT d.name
FROM dept
WHERE d.dept = s.dept
) as name
s.dept, SUM(s.quantity) as TotalQuantity
FROM sale s
GROUP BY s.dept
ORDER BY TotalQuantity;
Или, альтернативно:
SELECT d.dept, d.name,
(SELECT SUM(s.quantity)
FROM sales s
WHERE s.dept = d.dept
) as TotalQUantity
FROM dept d
ORDER BY TotalQuantity;
Это эквивалентно версии LEFT JOIN
- она содержит все отделы. С правильными индексами (на sales(dept, quantity)
) это может быть даже самая быстрая версия.