MYSQL 我需要先按列排序,然后根据某个值在另一列中出现的次数限制结果 column/columns

MYSQL I need to first sort by a column and then limit the results based on a number of times a value appears in another column/columns

首先,我是一个极端的菜鸟,在这里和 MYSQL 上发帖,所以对于任何格式或语法错误,我深表歉意。

取下面table.

name1 name2 小部件
强尼 苏西 3
强尼 汤米 5
安娜 苏西 2
约翰尼 比利 7
安娜 比利 9

我需要先按“小部件”排序,然后将结果限制为名称在 name1 列中最多出现 2 次,在 name2 列中最多出现 1 次。所以结果是

name1 name2 小部件
安娜 比利 9
约翰尼 汤米 5
强尼 苏西 3

我在这里找到了几篇关于获取计数的文章,但它们似乎不能满足我的特定需求。他们都只是给我一个计算出来的总数。我假设我需要使用 COUNTLIMIT 函数的某种组合,但我不太清楚从哪里开始。如果需要更多信息,请告诉我。任何帮助将不胜感激。

您可以使用常见的 table 表达式 CTErow_number 分配给 name1 和 name2 列。然后来自 CTE 的 select 并使用 where 仅 select 行,其中 row_number 是 <= 2 或 = 1.

with t1 as (
SELECT name1, name2, widgets, 
      row_number( ) over( partition by name1 order by widgets ) name1_row_num
FROM widgetTable 
    )
select name1, name2, widgets
from   t1  
where   name1_row_num <= 2 
order by widgets