mysql获得差异而不是SUM

时间:2015-08-09 21:19:12

标签: mysql database sum difference

我有以下查询:

SELECT SUM(P_QTY) 
FROM rankhistory
WHERE P_ID= '1'
AND RH_DATE>=1438556400
AND RH_DATE<1438642800 

上述查询返回268

结果集包含两个P_QTY元素,160108

现在我想要的是能够接收差异而不是总和,所以我希望我的查询返回的是52,我怎么能通过sql查询实现呢? 请注意,子查询可以返回多个结果,并且预期会得到总更改。例如,如果查询返回168 160 150,则结果应为18

1 个答案:

答案 0 :(得分:5)

没有用于区别的聚合函数,但由于您确切知道要使用哪些行,因此可以选择每个值作为自己的子查询,然后在单个select语句中相互减去两列。

SELECT a.op, b.op, a.op - b.op as diff
FROM (SELECT 10 as op) a
JOIN (SELECT 8 as op) b

根据您的架构表示,它可能如下所示:

SELECT a.op, b.op, a.op - b.op as diff
FROM (SELECT P_QTY as op FROM rankhistory WHERE P_QTY = 160) a
JOIN (SELECT P_QTY as op FROM rankhistory WHERE P_QTY = 108) b

但是,要在应用程序中定期使用此方法,您需要根据ID或其他易于选择且有意义的内容来处理它。

但听起来你想要别的东西。也许您对日期范围内的最大值和最小值之间的差异感兴趣?

SELECT MAX(P_QTY) - MIN(P_QTY) as diff
FROM rankhistory
WHERE rh_date BETWEEN '1438556400' AND '1438642800'