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

SQL查询现金与信用交易占比结果不符,求正确实现方案

问题解决:统计交易类型整体占比

原SQL的核心问题是使用了GROUP BY type,这会按交易类型分组统计数据。此时COUNT(*)指代的是当前分组内的交易数量,而非全表总交易数,因此计算出的是每组内部的占比(每组自身占比100%,另一类型占比0),完全不符合整体占比的统计需求。

修正后的SQL语句

SELECT 
    ROUND(SUM(CASE WHEN Type = 'Cash' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 0) || '%' AS "现金占比(%Cash)",
    ROUND(SUM(CASE WHEN Type = 'Credit' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 0) || '%' AS "信用占比(%Credit)"
FROM vending_machine_sales;

关键调整说明

  • 移除GROUP BY type,让查询基于全表数据计算整体占比
  • 使用100.0而非100,确保除法结果为浮点数,避免整数除法导致的精度丢失(比如3/2在整数除法中会得到1,而非1.5)
  • ROUND(..., 0)将结果取整,匹配你期望的整数百分比格式
  • 字符串拼接百分号:||适用于PostgreSQL、SQLite等数据库;若使用MySQL可替换为CONCAT(..., '%'),SQL Server则用+

原实际错误结果

交易类型(TYPE)现金占比(%Cash)信用占比(%Credit)
21480100
42971000

期望正确结果

现金占比(%Cash)信用占比(%Credit)
67%33%

内容的提问来源于stack exchange,提问作者Nickolas Jaramillo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:06:01