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

如何用带子查询的单条Oracle SQL语句计算用户有效物品占比?

解决方案

可以通过外层查询关联person表,结合子查询分别统计每个用户的有效物品数和总物品数,最终计算占比并格式化输出,SQL语句如下:

SELECT 
    p.person_id,
    CONCAT(
        ROUND(
            COALESCE(
                (SELECT COUNT(*) FROM item i WHERE i.person_id = p.person_id AND i.item_valid = 1) / 
                NULLIF((SELECT COUNT(*) FROM item i WHERE i.person_id = p.person_id), 0) * 100, 
                0
            ), 
            0
        ), 
        '%'
    ) AS percentage
FROM person p;

语句说明:

  • 外层查询遍历person表的所有用户
  • 第一个子查询(SELECT COUNT(*) FROM item i WHERE i.person_id = p.person_id AND i.item_valid = 1):统计当前用户的有效物品数量(仅统计item_valid=1的记录)
  • 第二个子查询(SELECT COUNT(*) FROM item i WHERE i.person_id = p.person_id):统计当前用户的总物品数量
  • NULLIF(..., 0):避免出现除以0的错误(若用户无物品时,总物品数为0,此处将其转为NULL)
  • COALESCE(..., 0):当总物品数为0时,直接返回0作为占比基数,避免计算结果为NULL
  • ROUND(..., 0):将占比结果取整,确保输出整数百分比
  • CONCAT(..., '%'):将数值结果拼接百分号,格式化输出为X%的形式

该语句会准确返回每个用户的有效物品占比,包括用户只有无效物品(占比0%)、全有效物品(占比100%)的情况,完全符合需求中的期望结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:38:29