萌新一个,嗨 2023-05-09 20:17 采纳率: 100%
浏览 61
已结题

关于#sql#的问题:a表余额表字段 日期 余额 b利率表 日期 利率利息公式 余额*利率求sql与解题思路

a表余额表字段 日期 余额 b利率表 日期 利率
利息公式 余额*利率
求sql与解题思路

  • 写回答

5条回答 默认 最新

  • 喝茶品人生 2023-05-09 20:49
    关注

    不建议使用join做等值链接,因为一旦字段变多匹配效率会非常低下。写个子查询效率高点:

    SELECT a.日期,
           (SELECT SUM(a.余额 * b.利率)
            FROM b
            WHERE b.日期 = a.日期) AS 利息
    FROM a;
    
    
    
    

    第二种写法cross apply:

    SELECT a.日期, c.利息
    FROM a
    CROSS APPLY (
        SELECT SUM(a.余额 * b.利率) AS 利息
        FROM b
        WHERE b.日期 = a.日期
    ) AS c;
    
    
    

    使用 LATERAL 关键字,这是apply高级写法的最优code:

    SELECT a.日期, t.利息
    FROM a
    LEFT JOIN LATERAL (
        SELECT SUM(a.余额 * b.利率) AS 利息
        FROM b
        WHERE b.日期 = a.日期
    ) t ON TRUE;
    
    
    

    如果是大企业,经验足的会使用窗口函数或者cte通用表达式来节省代码行数:

    SELECT DISTINCT a.日期,
           SUM(a.余额 * b.利率) OVER (PARTITION BY a.日期) AS 利息
    FROM a
    JOIN b ON a.日期 = b.日期;
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 5月18日
  • 已采纳回答 5月10日
  • 创建了问题 5月9日

悬赏问题

  • ¥15 思科WS-C4503-E核心交机
  • ¥15 批量提取WORD信息到EXCEL
  • ¥15 git后台提示“指定的网络不可用”如何处理?
  • ¥15 Omi框架如何兼容Vue
  • ¥15 windows api中有没有可以通过scsi设备发送离散buffer的接口,如何解决?(相关搜索:linux系统|结构体)
  • ¥15 r语言练习题,三个问题都有疑惑
  • ¥15 绝对路径都行,为什么相对路径不行
  • ¥20 ARM64架构下SSCMS部署问题
  • ¥20 请教如何让移动端的热区自适应
  • ¥30 为什么深度学习网络训练会出现训练集和测试集准确率和损失都不变的情况