在我的mysql查询中,我得到了列latitude,longitutde和total。使用lat和long我会计算一些将在别名列中打印的东西。这到目前为止工作。 reult看起来像这样:
Lat long length total
-----------------------------------------
49.236000 11.637500 3100 0.401500
49.178900 11.731900 3100 0.553000
49.582100 10.988300 3600 0.593800
现在我想将长度列中的所有值相加以获得值total_length
这是我的sql语句:
SELECT latitude, longitude, length, (ABS( latitude - 49.439810 ) + ABS( longitude - 11.439810 )) as total FROM records ORDER BY total LIMIT 20
甚至可以只总结一列吗?
我需要的是这样的:
Lat long length total
-----------------------------------------
49.236000 11.637500 3100 0.401500
49.178900 11.731900 3100 0.553000
49.582100 10.988300 3600 0.593800
----------------------------------------
9800
会有像20000
这样的给定值。如果total_length小于20000
,则LIMIT
应加起来10并再次计算total_length。直到total_length为20000或更多时才这样做。
对SQL DB的请求来自node.js后端。
答案 0 :(得分:1)
我会将问题分成两半并用不同的查询计算总和。
SELECT SUM(length)
FROM records
要获得您要求的确切结果,您可能需要做一些像这样的魔术:
SELECT latitude, longitude, length, (ABS( latitude - 49.439810 ) + ABS( longitude - 11.439810 )) as total
FROM records ORDER BY total LIMIT 20
UNION
SELECT NULL, NULL, SUM(length), NULL
FROM records
LIMIT 20
它有效,但是有一个“量身定制”的行不是我所说的干净方法。
答案 1 :(得分:1)
如果你真的需要一个查询,你可以在这里使用汇总技巧:
SELECT
latitude,
longitude,
ABS(latitude - 49.439810) + ABS(longitude - 11.439810) AS total,
SUM(length)
FROM records
GROUP BY
latitude,
longitude,
ABS(latitude - 49.439810) + ABS(longitude - 11.439810)
WITH ROLLUP
HAVING
(longitude IS NOT NULL AND total IS NOT NULL) OR latitude IS NULL;