[英]mysql condition based query
id mem_id tran_date tran_type tran_points plus_minus
-----------------------------------------------------------
1 2 2011-10-19 test 50 +
2 2 2011-10-19 test 50 +
3 3 2011-10-19 test 50 +
4 2 2011-10-19 test 15 -
對於每個單獨的成員,當plus_minus
列='+'中的數據時,必須添加tran_points
所有值;而當plus_minus ='-'中的數據時,需要減去tran_points中的值總和。
我想要以下輸出:
member_id points_balance
--------------------------
2 85
3 50
您可以使用SUM(IF())類型的子句來執行此操作,如下所示;
SELECT mem_id AS member_id,
SUM( IF(plus_minus="+", tran_type, (0 - tran_type) ) ) AS points_balance
FROM your_table
GROUP BY member_id
希望有幫助:)
對於下表:
CREATE TABLE t_test
(a INTEGER,
b INTEGER,
c VARCHAR(1)
);
以及以下條目:
INSERT INTO t_test values(1,50,'+');
INSERT INTO t_test values(1,30,'+');
INSERT INTO t_test values(1,15,'-');
INSERT INTO t_test values(2,30,'+');
INSERT INTO t_test values(2,40,'+');
此查詢按預期工作:
SELECT a,SUM((CONCAT(c,b)) +0) as t FROM t_test group by a;
a t
1 65
2 70
類似於答案
SELECT member_id,
SUM(CASE WHEN plus_minus ='+'THEN tran_type ELSE(-1)* tran_type)END)AS points_balance from tableX GROUP BY member_id
PS在某些數據庫中,tran_type應該為float或double。
您可以嘗試以下提到的sql嗎? 您不需要使用if條件。 SELECT mem_id AS member_id,SUM(tran_type)AS points_balance FROM your_table GROUP BY member_id
您也可以使用
SELECT b.mem_id,SUM(b.tran_points)-(SELECT COALESCE(SUM(a.tran_points),0) FROM tableX AS a WHERE a.plus_minus='-' AND a.mem_id=b.mem_id) AS tran_points FROM tableX AS b WHERE b.plus_minus='+' GROUP BY b.mem_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.