当前位置: 首页 > 面试题库 >

mysql选择每组的前n行

慕弘伟
2023-03-14
问题内容

我已阅读这篇文章:http : //www.xaprb.com/blog/2006/12/07/how-
to-select-the-firstleastmax-row-per-group-in-
sql/

并搜索其他问题

我有一个像这样的表:

| table.id    | USER.id
----------------------------------------------
| 1           | 101
| 2           | 101
| 3           | 101
| 4           | 101 
| 5           | 101
| 6           | 101
| 7           | 101 
| 8           | 101
| 9           | 101 
| 10          | 101
| 11          | 102
| 12          | 102 
| 13          | 102
| 14          | 102
| 15          | 103 
| 16          | 103
| 17          | 103
| 18          | 103
| 19          | 103
| 20          | 103
| 21          | 103
| 22          | 103 
| 23          | 103
| 24          | 104
| 25          | 104 
| 26          | 104
| 27          | 104
| 28          | 104
| 29          | 104
| 30          | 105
| 31          | 105
| 32          | 105 
| 33          | 106
| 34          | 106

我正在尝试获取按user.id分组的table.id的计数,如果user.id的计数大于7,则仅将结果显示为7(也就是将计数结果限制为7)。

在此示例中,结果应为:

| USER.id         | count of table.ID
----------------------------------------
| 101             | 7
| 102             | 4
| 103             | 7
| 104             | 6
| 105             | 3
| 106             | 2

我试过了:

SELECT USERid, COUNT(table.id)
FROM table
WHERE table.id IN (select top 7 table.id from table)
GROUP BY USERid

SELECT USERid, COUNT(table.id)
FROM table
WHERE (
    SELECT COUNT(table.ID) FROM table as t
    WHERE t.id = t.id AND t.USERid <= table.USERid
    ) <= 7
GROUP BY USERid

问题答案:

您可以简化查询,并使用LEAST函数

SELECT USERid, LEAST(7, COUNT(*))
FROM table
GROUP BY USERid

从您评论中的问题

SELECT SUM(countByUser) 
FROM
 (SELECT LEAST(7, COUNT(*)) as countByUser
  FROM table
  GROUP BY USERid) c

SqlFiddle



 类似资料:
  • 问题内容: 我有一张桌子,我想在该表格的基础上从每个组中获取前N个项目。如果我设置了那将从每个组中选择第一行,或者如果我设置了那那将从每个组中选择前5行。请帮我。 问题答案: 有多种方法可以做到这一点。这是一个使用相关子查询的查询:

  • 问题内容: 我试图从看起来像这样的数据库表结果中选择前2条记录 我试过这个查询 但是有些主题,例如失踪的地方,我什至尝试了以下链接的建议 如何选择每个组的前N行? 但是我为每个受检者得到两个以上 我究竟做错了什么? 问题答案: 您可以使用相关的子查询: 该查询通过串联三列来构造单列主键。如果您有真正的主键(如),则可以用代替。 SQL Fiddle中的示例。

  • 问题内容: 我真的很困惑查询需要返回在特定列上具有最大值的前N行。 例如,如果行具有相同的值。我必须返回还是要排。 问题答案: 如果您这样做: 您将获得前N行。 如果您这样做: 或者,您可以将其表达为: 从概念上讲,以下是您想要执行的操作,但在MySQL中可能不起作用:

  • 问题内容: 如何从表中选择前n个最大值? 对于这样的表: 对于n = 2,结果需要为: 下面的方法仅为每个组选择最大值。 返回值: 问题答案: 对于n = 2,您可以 对于任何n,您都可以使用此处介绍的方法模拟分区之上的排名。 编辑:其实这个文章会给你你需要什么。 基本上是这样的 用要分组的列的名称和保存值的列的名称替换。 要弄清楚它的功能是如何进行的,请从最内部的查询中逐步进行并运行它们。 而且

  • 问题内容: 我在数据库中有一系列值需要提取以创建折线图。因为我不需要高分辨率,所以我想通过从数据库中选择第5行来对数据进行重新采样。 问题答案:

  • 问题内容: 我正在努力寻找以下问题的最佳解决方案。假设我有一个像这样的表“ Table”: 我想为集合中的每个值选择:(’name1’,’name2’)10个随机唯一行。当然,可以像这样进行联合: 但是,如果我有100个唯一的名称,而我必须为其选择10个随机记录,则此查询将有点大。 提前非常感谢 问题答案: SQLFiddle演示