2013-07-13 24 views
1

所以我想一起得到一些不錯的統計數據,但我有問題得到這一個工作。它似乎應該是相當基本的,但不能爲我的生活得到這個工作,我遇到的所有搜索是人們試圖將列總結在一起(即一個簡單的總和(a + b + c)作爲t類型的東西MYSQL,使用多個SUMS,不總結多列在一起

我的表是這樣的:

btcfrom | btc to | btc | btctime 
usera  userb 5  3204580 
usera  userc 2  3450342 
userb  userc 1  3428925 
userc  usera 2  2358734 

什麼,我想實現的是,返回查詢:

btcto| btcgot | timesgot | btcsent | timessent 
usera 2   1  7   2 
userb 5   1  1   1 
userc 3   2  2   1 

,所以我想可能做到這一點的代碼是:

SELECT btcto,SUM(btc) AS btcgot, COUNT(btc) AS timesgot 
     (SELECT btcfrom, sum(btc) as btcsent, COUNT(btc) AS timessent 
     FROM tblBots 
     GROUP BY btcfrom) AS s 
FROM tblBots 
WHERE btcto=s.btcfrom 
GROUP BY btcto ORDER BY btcgot DESC 

但只是引發錯誤。如果有人能至少指向我的方向是正確爲了這個,我會非常感激

感謝

回答

1

您的查詢只需要較小的固定:

SELECT btcto,SUM(btc) AS btcgot, COUNT(btc) AS timesgot, btcsent, timessent 
from tblBots 
     join (SELECT btcfrom, sum(btc) as btcsent, COUNT(*) AS timessent 
     FROM tblBots 
     GROUP BY btcfrom) AS s on btcto=s.btcfrom 
GROUP BY btcto 
ORDER BY btcto 

另外,因爲你基本上是將兩個單獨的查詢,你可以使用UNION:

select btcto, sum(btcgot), sum(timesgot), sum(btcsent), sum(timessent) 
from (
    select btcto, sum(btc) as 'btcgot', count(*) as 'timesgot', 0 as 'btcsent', 0 as 'timessent' 
    from tblBots 
    group by btcto 
    union 
    select btcfrom, 0, 0, sum(btc), count(*) 
    from tblBots 
    group by btcfrom) as q 
group by btcto; 
+0

真棒。這正是我所追求的。歡呼的幫助! :D似乎我只是有錯誤的順序的東西!我不是真的習慣嵌套選擇 – Box

1

據我瞭解的結果,你需要收集您的表兩次,一次是在「爲」一次在「從」上獲取你想要的摘要。

在SQL的某些方言中,可以使用full outer join來聯合這兩組。您還可以使用union all,然後重新彙總數據:

select BTCto, sum(TimesGot) as TimesGot, sum(BTCgot) as BTCgot, 
     sum(BTCsent) as BTCsent, sum(TimeSent) as TimeSent 
from ((select BTCto, count(*) as TimesGot, sum(btc) as BTCgot, 
       NULL as BTCsent, NULL as TimeSent 
     from tblBots t 
     group by BTCto 
    ) union all 
     (select BTCfrom, NULL as TimesGot, NULL as BTCgot, 
       count(*) as BTCsent, sum(btc) as TimeSent 
     from tblBots t 
     group by BTCfrom 
    ) 
    ) t 
gorup by btcTo; 

您的查詢不有幾個原因的工作。但它試圖給select子句中的子查詢提供表別名。您只能在from子句中使用表別名。