1

特定のストアドプロシージャを実行するMySQLデータベースがあります。

そのうちの1つでは、特定のユーザーが支払わなければならない金額と、彼がすでに支払った金額を合計して、支払われる金額が支払われる金額と等しくない場合に、すべてのユーザーを返したいと思います。私は次の(単純化された)クエリを思いついた:

SELECT userId, SUM(costs) as sum_costs, 
  (SELECT SUM(payed)
   FROM payments p WHERE ta.userId=p.userId) as sum_payed
FROM ta 
GROUP BY ta.userId
ORDER BY ta.userId;

これにより、各ユーザーの費用と支払いの合計がわかります。しかし、コストと支払いが等しくないユーザーだけを選択する方法がわかりません。

WHERE sum_costs != sum_payed 

mysqlはWHERE句の列'sum_costs'を認識していないため、機能しません。

何かアイデア、選択を機能させる方法は?

4

3 に答える 3

1
SELECT * from
(select userId, SUM(costs) as sum_costs
    FROM ta 
       GROUP BY ta.userId) t1
 left join
  (SELECT userId,SUM(payed) as sum_payed FROM payments p group by userId) t2
   on t1.UserId=t2.UserId

where t1.sum_costs<>t2.sum_payed
ORDER BY t1.userId;
于 2012-12-12T19:47:36.597 に答える
1
SELECT * FROM 
(
SELECT userId, SUM(costs) as sum_costs, 
(SELECT SUM(payed)
FROM payments p WHERE ta.userId=p.userId) as sum_payed
FROM ta 
GROUP BY ta.userId
)a
WHERE a.sum_costs <> a.sum_payed 
--ORDER BY a.userId;

更新:ORDER BY UserId暗黙的に順序付けられるため、実際には必要ありませんGROUP BY

于 2012-12-12T19:24:50.703 に答える
0
WHERE SUM(costs) <> (SELECT SUM(payed) FROM payments p WHERE ta.userId=p.userId)
于 2012-12-12T19:24:33.527 に答える