繁体   English   中英

具有多个连接的优化SQL查询

[英]Optimized SQL query with multiple joins

我正在创建一个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

因此,在上述情况下,Account Num 1234和12345属于一个客户,两个帐户都与同一订阅相关联。 因此,我尝试将AccountNum#1234的查询编写为输入,并在一个查询中获取订阅ID,订阅名称,同一订阅中来自同一订阅的相同订阅的金额总和。

您无法执行聚合函数并检索在同一查询中未在“分组依据”中使用的字段,因为它相互矛盾您可以使用以下查询来查找每个客户花费的总金额

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;

如果您还想要订阅详细信息,则需要在每行中显示总行数,这是没有意义的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM