gpt4 book ai didi

mysql - 对象.limit(x).sum( :value) ignores the limit(x) -- why?

转载 作者:可可西里 更新时间:2023-11-01 08:05:56 27 4
gpt4 key购买 nike

我在使用 HourlyMetrics 编制一些网站统计数据时发现了一些奇怪的东西。

这是我本地开发环境最近 24 小时的统计数据。

irb(main):017:0> HourlyMetric.order('`to` DESC').limit(24).map(&:value)
HourlyMetric Load (2.0ms) SELECT `hourly_metrics`.* FROM `hourly_metrics` ORDER BY `to` DESC LIMIT 24
=> [0, 0, 0, 0, 10, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

我只是想要总数,但我暂时忘记了语法并尝试了两种不同的方式:

irb(main):016:0> HourlyMetric.order('`to` DESC').limit(24).sum(&:value)
HourlyMetric Load (2.3ms) SELECT `hourly_metrics`.* FROM `hourly_metrics` ORDER BY `to` DESC LIMIT 24
=> 13

irb(main):018:0> HourlyMetric.order('`to` DESC').limit(24).sum(:value)
(1.3ms) SELECT SUM(`hourly_metrics`.`value`) AS sum_id FROM `hourly_metrics` LIMIT 24
=> 21

sum(:value) 似乎生成了 21,因为这是 HourlyMetrics所有 记录的总和>。所以我知道它是从哪里来的,但是有人能帮我理解为什么当我使用 limit 范围时 sum(:value) 没有范围吗?

最佳答案

范围的,只是在聚合值的结果之后应用范围,并且由于聚合跨越表中的所有行,它只返回一行。

你的第二个陈述大致类似于:

SELECT * FROM (SELECT SUM(value) from hourly_metrics) limit 24;

这就是结果让您感到困惑的原因。

重申一下——聚合函数 SUM 返回 1 行,其范围为 LIMIT 24

关于mysql - 对象.limit(x).sum( :value) ignores the limit(x) -- why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21438590/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com