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

如何在单条SQL查询中关联3张表统计不同出生日期朋友的派对参与数据

实现方案

原SQL报错原因

SELECT子句中的子查询返回了多行多列,不符合单值表达式的语法要求,同时主查询缺少FROM数据源,逻辑结构完全错误。

正确SQL语句

-- Oracle环境适用,和你提供的建表语法兼容
SELECT
    f.dayBirth,
    TRIM(TO_CHAR(f.dayBirth, 'DAY')) AS weekDay,
    COUNT(CASE WHEN EXISTS (
        SELECT 1 FROM tblIsAssignedParty iap 
        WHERE iap.idMother = f.idMother
    ) THEN 1 END) AS totalFriendsForParty,
    TRUNC(
        COUNT(CASE WHEN EXISTS (
            SELECT 1 FROM tblIsAssignedParty iap 
            WHERE iap.idMother = f.idMother
        ) THEN 1 END) / SUM(COUNT(*)) OVER(),
        2
    ) AS totalFriendsForPartyPercent,
    COUNT(CASE WHEN NOT EXISTS (
        SELECT 1 FROM tblIsAssignedParty iap 
        WHERE iap.idMother = f.idMother
    ) THEN 1 END) AS totalFriendsNoParty,
    TRUNC(
        COUNT(CASE WHEN NOT EXISTS (
            SELECT 1 FROM tblIsAssignedParty iap 
            WHERE iap.idMother = f.idMother
        ) THEN 1 END) / SUM(COUNT(*)) OVER(),
        2
    ) AS totalFriendsNoPartyPercent
FROM tblFriends f
GROUP BY f.dayBirth
ORDER BY f.dayBirth;

逻辑说明

  • 用EXISTS判断朋友对应的母亲是否分配了派对,避免一个母亲对应多个派对时产生重复计数问题
  • 用聚合函数SUM(COUNT(*)) OVER()计算全表朋友总数量,无需额外嵌套子查询即可计算占比
  • 按dayBirth分组后,用条件计数分别统计有派对、无派对的朋友数量,直接匹配输出要求的字段
  • 若需要百分比展示为带%的格式,可将占比计算逻辑调整为TRUNC(计数/总数量*100,2) || '%'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:04