2017-01-20 6 views
-1

2つの列のそれぞれに関連付けられた場所に基づいて合計2つの列を返します。私は、このようなのようなORステートメントを使用する場合 :複数のWHERE句でSUMを計算しないSQL文

$query = "SELECT ec.ElecEnergy, ec.GasEnergy, ua.City, 
    SUM(ec.ElecEnergy) AS ecTotal, 
    SUM(ec.GasEnergy) AS gcTotal 
FROM energyconsumption ec INNER JOIN 
    useraccount ua 
    ON ec.User = ua.id 
    WHERE ua.City ='London' 
    OR City ='Manchester' 
    OR City ='Luton' 
    OR City ='Newcastle' 
    OR City ='Birmingham' 
    OR City ='Blackburn' 


    GROUP BY ec.ElecEnergy, ec.GasEnergy, ua.City 
    ORDER BY ec.ID ASC"; 






     $result = mysqli_query($conn,$query); 
     $r = array(); 
     if($result->num_rows){ 

       while($row = mysqli_fetch_array($result)){ 
       array_push($r, array('ElecConsump' => $row['ecTotal'],'GasConsump' =>$row['gcTotal'], 
       'Location' => $row['City'] 


       )); 

       } 

     } echo json_encode(array('results' => $r)); 

をそれはちょうど私のデータベースからすべてを返します。私が望むのは、私が列挙したそれぞれの都市に基づいた列の合計です。

私が間違っていることがわかりません

ありがとうございます!

+1

実際の金額とSUMが返されます。これにより、サーバーは値を集約しません。 'GROUP BY ua.City' – stuartd

+0

を追加して、これが問題であるかどうか不明ですが、Citiesの接頭辞を忘れていますか? (都市と都市とシティ) –

答えて

1

集計している列ではなく、group bycityを含めるだけです。 group byの列は、返される行を定義し、各行に一意の組み合わせがあることを覚えておいてください。

また、inを使用してください。 。 。はるかに簡単に読み書きするには:私もORDER BY句を変更

SELECT ua.City, SUM(ec.ElecEnergy) AS ecTotal, SUM(ec.GasEnergy) AS gcTotal 
FROM energyconsumption ec INNER JOIN 
    useraccount ua 
    ON ec.User = ua.id 
WHERE ua.City IN ('London', 'Manchester', 'Luton', 'Newcastle', 'Birmingham', 'Blackburn') 
GROUP BY ua.City 
ORDER BY ua.City ASC; 

お知らせ - あなたは都市ごとに1つの行に戻ってきていると仮定します。その後、

あなたが結合されたすべての都市の合計をしたい場合は、:

  • GROUP BYORDER BY句を削除します。
  • SELECTからua.cityを削除してください。