【问题标题】:Group only top n rows in sql只对sql中的前n行进行分组
【发布时间】:2019-09-26 04:32:55
【问题描述】:

我有一个表 (myTab),它有 3 列(id、marketValue、stock)。

我想对按 marketValue 排序的前 n 行进行分组。我能想到这个嵌套查询。

SELECT AVG(marketValue), stock FROM (SELECT marketValue, stock FROM myTab
order by(marketValue) desc LIMIT(n)) GROUP BY stock. 

我们可以进一步优化它吗?这不是获取每个组的前n行。

示例表

如果我将前 3 行分组,预期结果应该是:

【问题讨论】:

标签: mysql


【解决方案1】:

SQL 表代表无序集。因此,当我们讨论第一行或最后一行时,我们需要确定行的顺序。因此,您需要在内部查询中使用 order by 子句来获取前 n 行。休息看起来不错 -

SELECT AVG(marketValue), stock
FROM (SELECT marketValue, stock
      FROM myTab
      ORDER BY id
      LIMIT(n)
) X
GROUP BY stock

【讨论】:

  • 我们可以避免嵌套查询吗?
  • 我猜没有。因为你应该有前 N 条记录来获得它们的平均值。
猜你喜欢
  • 2015-01-03
  • 2012-08-11
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多