gpt4 book ai didi

MYSQL - 我如何选择不超过 x 行最大值与相同的字段值 y?

转载 作者:行者123 更新时间:2023-11-29 06:32:43 25 4
gpt4 key购买 nike

这个问题表述起来有点棘手,所以之前可能有人问过。

我正在从相互关联的数据表中选择行。我只希望最多 n 行具有与表中某些字段/列相同的值 x 以显示在我的集合中。有一个全局限制,本质上我总是希望查询返回相同数量的行,不超过 n 行共享值 x。我该怎么做?

这是一个数据示例(点应该表示此表很大,假设有 20000 行数据):

some_table
+----+----------+-------------+------------+
| id | some_id | some_column | another_id |
+----+----------+-------------+------------+
| 1 | 10 | value | 8 |
| 2 | 10 | value | 5 |
| 3 | 10 | value | 2 |
| 4 | 20 | value | 3 |
| 5 | 30 | value | 9 |
| 6 | 30 | value | 1 |
| 7 | 30 | value | 4 |
| 8 | 30 | value | 6 |
| 9 | 30 | value | 7 |
| 10 | 40 | value | 10 |
| .. | ... | ... | ... |
| .. | ... | ... | ... |
| .. | ... | ... | ... |
| .. | ... | ... | ... |
+----+----------+-------------+------------+

现在这是我的选择:

select * from some_table where some_column="value" order by another_id limit 6

但我不想返回 another_id = 1 到 6 的行,而是希望得到不超过 2 行具有相同 some_id 值的行。换句话说,我想得到:

result set
+----+----------+-------------+------------+
| id | some_id | some_column | another_id |
+----+----------+-------------+------------+
| 6 | 30 | value | 1 |
| 3 | 10 | value | 2 |
| 1 | 10 | value | 3 |
| 7 | 30 | value | 4 |
| 4 | 20 | value | 8 |
| 10 | 40 | value | 10 |
+----+----------+-------------+------------+

注意结果按another_id排序,但some_id值相同的结果不超过2个。

我怎样才能最好地(意思是最好在一个查询中并且相当快)到达那里?谢谢!

最佳答案

select id, some_id, some_column, another_id from (
select
t.*,
@rn := if(@prev = some_id, @rn + 1, 1) as rownumber,
@prev := some_id
from some_table t
, (select @prev := null, @rn := 0) var_init
where some_column="value"
order by some_id, id
) sq where rownumber <= 2
order by another_id;

首先我们按so​​me_id排序,在子查询中id做正确的计算。然后我们在外部查询中按 another_id 排序以获得正确的排序。

关于MYSQL - 我如何选择不超过 x 行最大值与相同的字段值 y?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26930622/

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