簡體   English   中英

基於mysql條件的查詢

[英]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.

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