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的两个元素,分别是160
和108
现在我想要的是能够接收差值而不是总和,所以我希望我的查询 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'
我有以下查询:
SELECT SUM(P_QTY)
FROM rankhistory
WHERE P_ID= '1'
AND RH_DATE>=1438556400
AND RH_DATE<1438642800
上面的查询returns 268
结果集包含P_QTY的两个元素,分别是160
和108
现在我想要的是能够接收差值而不是总和,所以我希望我的查询 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'