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
我在这里找到了几篇关于获取计数的文章,但它们似乎不能满足我的特定需求。他们都只是给我一个计算出来的总数。我假设我需要使用 COUNT
和 LIMIT
函数的某种组合,但我不太清楚从哪里开始。如果需要更多信息,请告诉我。任何帮助将不胜感激。
您可以使用常见的 table 表达式 CTE
将 row_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
首先,我是一个极端的菜鸟,在这里和 MYSQL 上发帖,所以对于任何格式或语法错误,我深表歉意。
取下面table.
name1 | name2 | 小部件 |
---|---|---|
强尼 | 苏西 | 3 |
强尼 | 汤米 | 5 |
安娜 | 苏西 | 2 |
约翰尼 | 比利 | 7 |
安娜 | 比利 | 9 |
我需要先按“小部件”排序,然后将结果限制为名称在 name1 列中最多出现 2 次,在 name2 列中最多出现 1 次。所以结果是
name1 | name2 | 小部件 |
---|---|---|
安娜 | 比利 | 9 |
约翰尼 | 汤米 | 5 |
强尼 | 苏西 | 3 |
我在这里找到了几篇关于获取计数的文章,但它们似乎不能满足我的特定需求。他们都只是给我一个计算出来的总数。我假设我需要使用 COUNT
和 LIMIT
函数的某种组合,但我不太清楚从哪里开始。如果需要更多信息,请告诉我。任何帮助将不胜感激。
您可以使用常见的 table 表达式 CTE
将 row_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