在查询中汇总一列

时间:2017-12-19 07:54:05

标签: mysql

在我的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后端。

2 个答案:

答案 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;

enter image description here

Demo