题解 | #列出供应商及其可供产品的数量#
列出供应商及其可供产品的数量
https://www.nowcoder.com/practice/17f22851cf204019b51a36761a3afc79
一、题意
SQL105 列出供应商及其可供产品的数量
有Vendors表含有vend_id供应商id.
有Products表含有供应商id和供应产品id
列出供应商(Vendors 表中的 vend_id)及其可供产品的数量,包括没有产品的供应商。你需要使用 OUTER JOIN 和 COUNT()聚合函数来计算 Products 表中每种产品的数量,最后根据vend_id 升序排序。
注意:vend_id 列会显示在多个表中,因此在每次引用它时都需要完全限定它。
二、题解
select
a.prod_name,count(b.prod_id) prod_id
from Vendors a left join Products b on a.vend_id = b.vend_id group by a.vend_id
union all
select
a.prod_name,count(b.prod_id) prod_id
from Vendors a right join Products b on a.vend_id = b.vend_id group by a.vend_id
因为需要使用outer join 第一次写错误了 通过控制台数据分析,调试代码
with t as (
select
a.vend_id,count(b.prod_id) prod_id
from Vendors a left join Products b on a.vend_id = b.vend_id group by a.vend_id
union
select
a.vend_id,count(b.prod_id) prod_id
from Vendors a right join Products b on a.vend_id = b.vend_id group by a.vend_id
)select * from t where vend_id is not null order by vend_id
所用到的知识点大概就是union和union all的区别
还有right join 和left join 这两个连接的特性还是有点不够明白。
最后去看了题解,才发现自己被题意的outer join 带歪了:mysql没有outer join 相关语句,但可以对left join和right join的结果用union连接来实现。
题解代码
SELECT v.vend_id vend_id, COUNT(p.prod_id) prod_id FROM Vendors v LEFT JOIN Products p ON v.vend_id = p.vend_id GROUP BY v.vend_id ORDER BY v.vend_id;#题解#

SHEIN希音公司福利 280人发布