如何在单SQL查询中对两个SELECT语句的列执行计算并关联结果
解决方案:通过JOIN整合两个表并生成计算结果
这问题很常见,用SQL的关联查询就能轻松搞定!咱们直接上实用方案:
核心SQL代码
根据你用的数据库方言,字段名带空格需要用对应符号包裹,这里给出两种常用写法:
-- MySQL 写法(用反引号包裹含空格的字段名) SELECT s.`Shop name` AS 商店名称, s.`items sold` AS 售出数量, r.`Items returned` AS 退回数量, s.`items sold` - r.`Items returned` AS 净售出数量 FROM tblSold s INNER JOIN tblReturned r ON s.`Shop name` = r.`Shop name`; -- SQL Server 写法(用方括号包裹含空格的字段名) SELECT s.[Shop name] AS 商店名称, s.[items sold] AS 售出数量, r.[Items returned] AS 退回数量, s.[items sold] - r.[Items returned] AS 净售出数量 FROM tblSold s INNER JOIN tblReturned r ON s.[Shop name] = r.[Shop name];
执行后得到的结果表
| 商店名称 | 售出数量 | 退回数量 | 净售出数量 |
|---|---|---|---|
| Shop A | 100 | 10 | 90 |
| Shop B | 50 | 5 | 45 |
| Shop C | 75 | 7 | 68 |
| Shop D | 80 | 8 | 72 |
额外补充说明
- 这里用
INNER JOIN是因为你的示例中两个表的商店记录完全匹配,如果存在某个商店只在其中一个表出现的情况,可以改用LEFT JOIN(保留tblSold的所有记录)或RIGHT JOIN(保留tblReturned的所有记录)。此时缺失的数值会显示为NULL,计算时可以用COALESCE函数兜底,比如COALESCE(s.items sold, 0) - COALESCE(r.Items returned, 0)避免计算结果为NULL。 - 字段名包含空格时一定要用对应的符号包裹,否则SQL会直接报错,这点要注意!
内容的提问来源于stack exchange,提问作者DJMH
相关产品推荐
相关产品推荐

