2014-10-02 48 views
-1

我試圖得到一個平均添加多個行條目,然後將SQL

我有如下表:

| ClientName | MemberName | TotalAmountSpent | PercentAmountSpent| 
|-----Palace--- |---------John---- |-----------376.26------ |------------???------------ | 
|-----Palace--- |--------Adem---- |-----------646.83------ |------------???------------ | 
|----Pizzeria--- |---------Zoey----- |-----------10.00-------- |------------???------------ | 

這是我到目前爲止有:

SELECT c.ClientName 
     ,m.Mem_Name  


     ,Sum(mv.AmountSpent) as TotalAmountSpent 
     ,Sum(mv.AmountSpent)/ *100 as PercentAmountSpent 


FROM Client c 

JOIN MemberVisits mv 
On c.ClientId = mv.RestaurantId 
JOIN Member m 
On m.Mem_ID = mv.MemberId 

GROUP by ClientName, m.Mem_Name 

ORDER by ClientName 

的公式是:(Total Amount Spent/total business sales) * 100

例如:johns percentamountspent應該是(376.26/ (376.26 + 646.83)) * 100

我該如何解決這一行Sum(mv.AmountSpent)/ /*Something here */ *100 as PercentAmountSpent以獲得正確的輸出?

感謝

+1

不可能與一個查詢。直到掃描完所有行後,「總業務銷售額」纔可用,並且您試圖在每行計算中使用該總額。你將不得不使用子查詢來獲得總數。 – 2014-10-02 14:52:24

回答

0

您可以使用子查詢(以避免在計算多個SUM),而在另一子查詢內部聯接以獲得totalBusinessSales(其看起來像RestaurantId的amountSpent的總和)

select 
    ClientName 
    MemName, 
    totalAmountSpent, 
    sumAmountSpent/totalBusinessSales * 100 as percentAmountSpent 
    from 

    (select c.ClientName, 
      m.Mem_Name, 
      sum(mv.AmountSpent) as totalAmountSpent, 
      sum(s.TotalBusinessSales) as totalBusinessSales 
    from Client c 
    join MemberVisits mv on c.ClientId = mv.RestaurantId 
    join Member m on m.Mem_ID = mv.MemberId 
    join (select RestaurantId, sum(amountSpent) as TotalBusinessSales 
      from MemberVisits 
      group by RestaurantId) s 
     on s.RestaurantId = c.ClientId 
    group by t.ClientName, m.Mem_Name) i 

沒有第一級別的子查詢,您將有

select c.ClientName, 
     m.Mem_Name, 
     sum(mv.AmountSpent) as totalAmountSpent, 
     sum (mv.AmountSpent)/sum(s.TotalBusinessSales) * 100 as percentAmountSpent 
from Client c 
join MemberVisits mv on c.ClientId = mv.RestaurantId 
join Member m on m.Mem_ID = mv.MemberId 
join ( select RestaurantId, sum(amountSpent) as TotalBusinessSales 
     from MemberVisits 
     group by RestaurantId) s 
      on s.RestaurantId = c.ClientId 
group by t.ClientName, m.Mem_Name 
+0

感謝您的回覆。我正在研究你的第二個建議,儘管我得到的錯誤百分比數額花費... – Noonmoon 2014-10-02 15:46:20

+0

感謝你,我得到了這個工作! – Noonmoon 2014-10-02 17:09:49

+0

@Noonmoon不客氣。 – 2014-10-02 17:13:27

1

你可以做這樣的事情:

http://sqlfiddle.com/#!6/cf953/4

create table test (ClientName varchar(50), MemberName varchar(50), TotalAmountSpent float) 
insert into test (ClientName, MemberName, TotalAmountSpent) 
select 'Palace', 'John', 376.26 
union all select 'Palace', 'Adem', 646.83 
union all select 'Pizzeria', 'Zoey', 10 

select t.ClientName, 
    t.MemberName, 
    t.TotalAmountSpent, 
    (t.TotalAmountSpent/groupedClientName.totalAmountSpent * 100) as percentAmountSpent 
from test t 
inner join (
    -- this subquery is used to get the total amount per "Client", which then can be used in the outer query to get a per member contribution percent 
    select ClientName, sum(totalAmountSpent) as totalAmountSpent 
    from test 
    group by ClientName 
) groupedClientName on t.ClientName = groupedClientName.ClientName