SQL作业语法问题求助:字符串拼接、字段修剪及统计查询
你的SQL作业任务解决方案
没问题,我来帮你逐个搞定这些SQL作业任务,每个需求都会给出正确的代码并讲清楚细节:
a. 字符串拼接+修剪尾随空格+虚拟列命名
首先,我们需要先修剪vend_name和vend_location的尾随(以及开头)空格,再拼接成name (location)的格式,同时给虚拟列命名。不同数据库的拼接和修剪函数略有差异,我给你列出主流数据库的写法:
MySQL/PostgreSQL 版本
SELECT CONCAT(TRIM(vend_name), ' (', TRIM(vend_location), ')') AS vendor_info FROM vendors;
TRIM()函数会自动去掉字段前后的所有空格(包括你提到的尾随空格)CONCAT()用来把修剪后的名称、括号、地点拼接成目标格式AS vendor_info就是给这个新生成的虚拟列命名,满足需求c
SQL Server 版本
如果是SQL Server 2017及以上,也可以用TRIM();旧版本需要用LTRIM(RTRIM())分别去掉开头和尾随空格:
-- SQL Server 2017+ SELECT CONCAT(TRIM(vend_name), ' (', TRIM(vend_location), ')') AS vendor_info FROM vendors; -- 旧版SQL Server SELECT CONCAT(LTRIM(RTRIM(vend_name)), ' (', LTRIM(RTRIM(vend_location)), ')') AS vendor_info FROM vendors;
Oracle 版本
Oracle用||做字符串拼接,TRIM()同样处理空格:
SELECT TRIM(vend_name) || ' (' || TRIM(vend_location) || ')' AS vendor_info FROM vendors;
d. 查询供应商‘DLL01’提供的产品数量
假设产品表名为products,且通过vend_id关联供应商表,用COUNT()统计即可:
SELECT COUNT(*) AS num_products FROM products WHERE vend_id = 'DLL01';
COUNT(*)会统计该供应商下所有产品的行数- 如果想排除产品ID为NULL的记录,可以换成
COUNT(product_id) AS num_products给统计结果列命名
e. 查询每个供应商提供的产品数量
这里需要用GROUP BY按供应商ID分组,再统计每组的产品数量:
SELECT vend_id, COUNT(*) AS num_products FROM products GROUP BY vend_id;
GROUP BY vend_id会把同一个供应商的所有产品归为一组COUNT(*)统计每组内的产品数量,最终输出vend_id和num_products两列
如果需要包含没有提供任何产品的供应商(显示数量为0),可以用左连接关联供应商表和产品表:
SELECT v.vend_id, COUNT(p.product_id) AS num_products FROM vendors v LEFT JOIN products p ON v.vend_id = p.vend_id GROUP BY v.vend_id;
- 左连接会保留所有供应商记录,即使没有对应产品
COUNT(p.product_id)会忽略NULL值,所以没有产品的供应商会显示0
内容的提问来源于stack exchange,提问作者Javier Maguiña
相关产品推荐
相关产品推荐

