2014-11-03 48 views
0

我有问题与MySQL语法,我有表像MYSQL SUM,IF和结果为0

GNT6988 rawabuaya 30000000 
GNT3429 Purwacaraka 100000 
GNT1326 CLARA  15000000 
GNT9059 bensugih1 6100000 
GNT9620 bensugih2 6100000 
GNT9851 Abdulfattah 500000 
GNT3927 SUKSES01 10000000 
GNT4469 SUKSES02 10000000 

和我有mysql语法像

SELECT trx, SUM(jmlgf) AS jumlahgf 
     FROM gf_start 
     GROUP BY trx 
     HAVING jumlahgf < 4000000 ORDER BY tgl ASC LIMIT 40 

我得到了导致

GNT3429 100000 
GNT9851 500000 
GNT1405 1000000 
GNT9660 100000 
GNT7222 100000 
GNT2407 2100000 
GNT3383 100000 
GNT5586 100000 
GNT1419 100000 

**i want to get result like** 

GNT3429 100000 
GNT9851 500000 
GNT1405 1000000 
GNT9660 0 
GNT7222 0 
GNT2407 0 
GNT3383 0 

如果SUM(jmlgf)> = 1600000

我应该如何处理mysql语法?

使用PHP MYSQL

+1

请检查您的问题,我不确定你在问什么。 – Haris 2014-11-03 15:05:18

+0

1)发布表结构2)告诉我们你想从中计算出什么3)通过在你的键盘上扔一只猫命名表字段不是一个好习惯。可以考虑动物滥用,结果是痛苦的阅读。 – David162795 2014-11-03 15:11:56

+0

我想要得到的结果总数SUM(jmlgf)<=(名义)我的查询停止读取记录。谢谢 – 2014-11-03 15:15:13

回答

1

无论我使用一个变量,像这样: -

SELECT trx, @sum_so_far:[email protected]_so_far + jumlahgf, IF(@sum_so_far >= 1600000, 0, jumlahgf) AS jumlahgf 
FROM 
(
    SELECT trx, SUM(jmlgf) AS jumlahgf 
    FROM gf_start 
    GROUP BY trx 
    HAVING jumlahgf < 4000000 
    ORDER BY tgl ASC 
) sub0 
CROSS JOIN 
(
    SELECT @sum_so_far:=0 
) sub1 
LIMIT 40 

或参加与另一个查询结果得到的总和,到目前为止,这样的事情: -

SELECT trx, IF(rolling_cnt >= 1600000, 0, SUM(jmlgf)) AS jumlahgf 
FROM gf_start 
(
    SELECT a.trx, SUM(b.jmlgf) AS rolling_cnt 
    FROM gf_start a 
    INNER JOIN gf_start b 
    ON a.trx = b.trx 
    AND a.tgl <= b.tgl 
    GROUP BY a.trx 
) sub0 
ON gf_start.trx = sub0.trx 
GROUP BY trx 
HAVING jumlahgf < 4000000 
ORDER BY tgl ASC 
LIMIT 40 
+0

啊太棒了,你救了我的现场..:D谢谢师父 – 2014-11-03 22:54:38