簡體   English   中英

如何匯總具有相同值的數據總數?

[英]How to Sum total of data that have a same value?

我想對數據庫中的狀態總數求和。 如果我的狀態= 0,我希望它計算狀態= 0的所有實例。我已經嘗試過此代碼,但總和與我的數據庫不匹配。

SELECT t.date as Date, COUNT(DISTINCT t.id) as Transaction, SUM(t.status=0) as Success, COUNT(DISTINCT r.id) as Request, SUM(r.status=0) as RequestSuccess 
FROM transfer_tx_201503 AS t,request_tx_201503 AS r 
WHERE t.time >='00:00:00' AND t.time <= '$searchterm' AND t.date=r.date 
GROUP BY `date` 

您的查詢正確編寫為:

SELECT t.date as Date, COUNT(DISTINCT t.id) as Transaction, SUM(t.status=0) as Success, COUNT(DISTINCT r.id) as Request, SUM(r.status=0) as RequestSuccess 
FROM transfer_tx_201503 t JOIN
     request_tx_201503 r 
     ON t.date = r.date 
WHERE t.time >='00:00:00' AND t.time <= '$searchterm' 
GROUP BY `date` 

(請注意, ON子句和顯式JOIN這是將兩個表連接在一起的正確方法。)

您的問題是,對於給定的date ,您將獲得笛卡爾乘積,因為每個表中的多行都與該日期匹配。 最好的解決方案是預先匯總結果:

SELECT t.date as Date, t.Transaction, t.Success, r.Request, r.RequestSuccess 
FROM (select date, count(*) as transaction, sum(t.status = 0) as success
      from transfer_tx_201503 t
      group by date
     ) t JOIN
     (select date, count(*) as Requestion, SUM(r.status = 0) as RequestSuccess
      from request_tx_201503 r 
      group by date
     ) r
     ON t.date = r.date 
WHERE t.time >='00:00:00' AND t.time <= '$searchterm' ;

請注意,您不再需要外部group by 您還可以在每個子查詢中包括where子句。 如果存在問題,那可能會提高性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM