题解 | #列出供应商及其可供产品的数量#

列出供应商及其可供产品的数量

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;
#题解#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务