我有以下查询:
SELECT SUM(P_QTY)
FROM rankhistory
WHERE P_ID= '1'
AND RH_DATE>=1438556400
AND RH_DATE<1438642800
上述查询返回268
结果集包含两个P_QTY元素,160
和108
现在我想要的是能够接收差异而不是总和,所以我希望我的查询返回的是52
,我怎么能通过sql查询实现呢?
请注意,子查询可以返回多个结果,并且预期会得到总更改。例如,如果查询返回168
160
150
,则结果应为18
。
答案 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'