gpt4 book ai didi

MySQL 按字段唯一性对结果进行排序

转载 作者:行者123 更新时间:2023-11-29 12:09:03 25 4
gpt4 key购买 nike

我有一个网站,列出了来自各个供应商(数百个不同供应商)的产品。当您搜索特定产品时,我会返回一堆可以按价格等排序的产品。

我希望向用户展示的默认排序能够展示尽可能多的独特供应商,而不使用 groupby 并从同一用户中删除多个产品。

因此,如果给定的搜索查询返回供应商 a 的 10 个产品、供应商 b 的 5 个产品、供应商 C 的 5 个产品等,则默认排序将显示其中每个产品中的一个(实际上以任何顺序) ,然后是其余结果。

编辑:示例数据集:
+----+------------+--------------+
|编号 |供应商 ID |产品名称 |
+----+------------+--------------+
| 1 | 1 |产品1 |
| 2 | 1 |产品2 |
| 3 | 1 |产品3 |
| 4 | 2 |产品4 |
| 5 | 2 |产品5 |
| 6 | 2 |产品6 |
| 7 | 3 |产品 7 |
| 8 | 3 |产品 8 |
| 9 | 3 |产品 9 |
+----+------------+--------------+
期望的结果:
+----+------------+--------------+
|编号 |供应商 ID |产品名称 |
+----+------------+--------------+
| 1 | 1 |产品1 |
| 4 | 2 |产品4 |
| 7 | 3 |产品 7 |
| 2 | 2 |产品2 | * 初始唯一结果后的任何排序*
| 3 | 2 |产品3 |
+----+------------+--------------+
实际上,在初始排序顺序之后进行任何排序。

最佳答案

您可以通过枚举每个供应商的结果然后对其进行排序来做到这一点。

select s.*
from (select s.*,
(@rn := if(@v = vendor, @rn + 1,
if(@v := vendor, 1, 1)
)
) as seqnum
from (<your query here>) s cross join
(select @v := '', @rn := 0) params
order by vendor
) s
order by (seqnum = 1) desc,
price asc; -- or whatever you want to sort by

关于MySQL 按字段唯一性对结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31001505/

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