【问题标题】:Sum one column in query在查询中求和一列
【发布时间】:2017-12-19 07:54:04
【问题描述】:

在我的 mysql 查询中,我得到了纬度、经度和总计列。使用 lat 和 long 我做了一些计算,这些东西将打印在别名列中。到目前为止有效。结果看起来像这样:

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。 Do 的频率一直保持到 total_length 为 20000 或更多。

对 SQL 数据库的请求将来自 node.js 后端。

【问题讨论】:

  • Output应该是什么不是很清楚,你能得到例子的预期结果吗?
  • 你是如何“消费”查询结果的? (PHP?C#?Java?...)在产品中执行它可能比在 MySQL 中执行它更容易和更有效,特别是当您使用表示分页的限制时。
  • 是的,但它只会传递一行,或者多行重复相同的值。
  • @Jens 我添加了预期的结果
  • @Used_By_Already 请求将来自 node.js 后端,因此它将是 JavaScript

标签: mysql


【解决方案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

它有效,但有一个“量身定制”的行并不是我所说的干净方法。

【讨论】:

  • 这里的问题是SUM(length)...FROM records 将汇总表记录中的所有条目,但数量很多。我只想总结第一个查询结果中的值
  • 只需添加LIMIT 子句
【解决方案2】:

如果您确实需要单个查询,可以在此处使用汇总技巧:

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;

Demo

【讨论】:

  • 阅读并随身携带:stackoverflow.com/questions/8837262/…
  • 我使用 phpmyadmin 来管理我的数据库。但它看起来不知道密钥WITHROLLUP
  • @WeSt 上面的查询当然应该直接从 MySQL Workbench 运行。我不能保证其他事情。
  • total 不是表格的一列。 total 是计算值的别名
  • @WeSt 我更新了我的查询,但这并没有改变我给出的基本答案。
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
  • 2015-06-23
  • 2014-11-24
  • 1970-01-01
相关资源
最近更新 更多