mysql 求差而不是求和

mysql get difference instead of SUM

我有以下查询:

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

上面的查询returns 268

结果集包含P_QTY的两个元素,分别是160108

现在我想要的是能够接收差值而不是总和,所以我希望我的查询 return 是 52,我如何通过 [=31= 实现它] 询问? 请注意,子查询可以 return 多个结果,其目的是获取总变化。例如查询returns 168 160 150,结果应该是18.

没有用于差异的聚合函数,但由于您确切知道要使用哪些行,因此您可以 select 每个值作为其自己的子查询,然后在单个 [=21] 中将两列相减=]声明。

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

按照你的schema表达,大概是这样的:

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可行且有意义的东西来处理它。

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

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