sql >> Databasteknik >  >> RDS >> Mysql

mysql få skillnad istället för SUM

Det finns ingen aggregerad funktion för skillnad, men eftersom du vet exakt vilka rader du ska använda kan du välja varje värde som en egen underfråga och sedan subtrahera de två kolumnerna från varandra i en enda select-sats.

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

Uttryckt i enlighet med ditt schema skulle det förmodligen se ut så här:

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

För att använda detta tillvägagångssätt regelbundet i en applikation, men du vill hantera det baserat på ID eller något annat lätt valbart och meningsfullt.

Det låter som att du vill ha något annat. Du kanske är intresserad av skillnaden mellan max och min under ett datumintervall?

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



  1. anrop externt skript med mySQL-utlösaren WHITOUT sys_exec på ubuntu ARMHF

  2. tomcat7 - jdbc datasource - Detta är mycket sannolikt att skapa en minnesläcka

  3. En lösning för gränsen för åtkomst 255 kolumner

  4. Hur man förhindrar anslutningstidsgränser för stora MySQL-importer