【问题标题】:Optimized SQL query with multiple joins具有多个连接的优化 SQL 查询
【发布时间】:2019-03-27 20:44:29
【问题描述】:

我正在创建一个 SQL 视图。

我有以下:

  • 表 A:客户帐户信息
  • 表 B:与订阅的帐户关系
  • 表 C:客户为每次订阅支付的金额和其他详细信息
  • 表 D:所有订阅相关信息

表 A:

AccountNum
Customer_Name
CustomerCode

表 B:

SubscriptionId
SubscriptionName
AccountNum

表 C:

SubscriptionId
AccountNum
AmountPaid

表 D:

SubscriptionId
SubscriptionName

我想将输入作为 AccountNum 并获取他的帐户的订阅详细信息以及在不同帐户下为同一订阅支付的每次订阅的金额以及订阅详细信息和一个查询中的帐户详细信息。

例子:

Table A:
AccountNum   Customer_Name   CustomerCode
1234         TestName        TestCode  
12345        Testname1       TestCode1

Table B:
SubscriptionId  SubscriptionName  AccountNum
12              Netflix           1234
12              Netflix           12345

Table C:
SubscriptionId  AccountNum   AmountPaid
12              1234         100
12              12345        100

Table D:
SubscriptionId  SubscriptionName
12              Netflix 
13              Prime

因此,在上述情况下,帐户编号 1234 和 12345 属于一个客户,并且两个帐户都绑定到同一个订阅。因此,我尝试为 AccountNum #1234 编写一个查询作为输入,并在一个查询中获取订阅 ID、订阅名称、从同一客户下的不同帐户为同一订阅支付的金额总和。

【问题讨论】:

    标签: sql postgresql join


    【解决方案1】:

    您不能在同一查询中执行聚合函数并检索未在“分组依据”中使用的字段,因为它相矛盾 您可以使用以下查询来查找每位客户的总支出

    select 
          a.CustomerCode, 
          sum(case when c.AmountPaid is not null 
                   then c.AmountPaid else 0 end) as TotalAmtPaid
       from a
          inner join b
             on a.AccountNum=b.AccountNum
          inner join c
             on a.AccountNum=c.AccountNum
        where 
          a.AccountNum = ?
        group by 
          a.CustCode;
    

    如果您还想要订阅详细信息,则需要显示多行,每行显示总金额,这没有意义

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 2017-04-24
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 2019-09-03
      相关资源
      最近更新 更多