You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一位置同时编写两条同表分状态金额统计的SQL查询

问题根因

你写的SQL有两个明确的语法错误:

  • 带空格的别名没有加标识符包裹,paid Amount、unpaid Amount会被解析器拆成两个独立token,直接触发语法报错
  • 不能用AND拼接两个独立的SELECT语句,这种写法不符合SQL语法规范,无法同时返回两列统计结果。
正确写法

用条件聚合一次查表就能出结果,性能最优,兼容所有支持SQL92标准的数据库:

SELECT
  SUM(CASE WHEN status = '1' THEN amount ELSE 0 END) AS `paid Amount`,
  SUM(CASE WHEN status = '0' THEN amount ELSE 0 END) AS `unpaid Amount`
FROM transaction
WHERE user_id = '10';

写法注意点

  • 带空格的别名需要用对应数据库的标识符包裹:MySQL/MariaDB/ClickHouse等用反引号`,PostgreSQL/Oracle/SQL Server用双引号"
  • 公共筛选条件user_id = '10'直接放在WHERE层提前过滤数据,比在子查询里重复写筛选条件效率高很多。

如果你用的是MySQL这类支持IF函数的数据库,也可以写得更简洁:

SELECT
  SUM(IF(status = '1', amount, 0)) AS `paid Amount`,
  SUM(IF(status = '0', amount, 0)) AS `unpaid Amount`
FROM transaction
WHERE user_id = '10';

不要尝试写两个独立SELECT拼接结果的写法,要么触发语法错误,要么会重复扫描同一张表,数据量上来之后性能差距非常明显。

内容的提问来源于stack exchange,提问作者Bhaskar Choudhary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:15:57