gpt4 book ai didi

mysql - 表中多个组的多个最小值

转载 作者:行者123 更新时间:2023-11-30 01:33:55 25 4
gpt4 key购买 nike

到目前为止,我尝试了多种方法,我有一个大表(数千条记录),其中有各种旅行,除了其他值外,还有一些不同的国家/地区,以及旅行的持续时间(以天为单位),我想随机选择给定数量的随机项目,其中包含从给定旅行中随机选择的内容,其中包含每个国家/地区最短的旅行,但在某些国家/地区最短旅行为 8 天,其他地方为 12 天,...等等

| country | duration | price | departure  | hotelname | otherData |
| A | 8 | 123 | 2013-06-19 | hotel A | blah blah |
| A | 15 | 234 | 2013-06-20 | hotel A | blah blah |
| A | 15 | 234 | 2013-06-20 | hotel B | blah blah |
| A | 15 | 234 | 2013-06-20 | hotel C | blah blah |
| B | 8 | 345 | 2013-06-21 | hotel D | blah blah |
| C | 12 | 456 | 2013-06-22 | hotel E | blah blah |
...

我需要构建一个包含 6 条记录的随机数组,其中包含行程选择,尝试最小化显示来自同一国家/地区的更多结果(但如果表中没有足够多的不同国家/地区,则允许)并且为每个国家/地区随机选择一些该国家/地区持续时间最短的记录。

问题是有些国家的最短行程为 8 天,其他地方为 11 天,所以我无法做一个简单的:

where days<9

而且因为在赛季结束时,可能会有很少的行程导致没有足够的结果,我不能这样做:

group by country

我的想法是为每个国家/地区选择 6 条记录,使用 order by period ASC 获得该国家/地区可用的最短持续时间,然后通过 rand() 对所有国家/地区的结果重新排序 并选择前 6 个。

最佳答案

可能的方法,但可能效率不高。

SELECT country, duration, price, departure, hotelname, otherData
FROM
(
SELECT a.country, a.duration, a.price, a.departure, a.hotelname, a.otherData,
@counter := IF(a.country = @PrevCountry, @counter + 1, 0) AS CountryCounter,
@PrevCountry := a.country
FROM (SELECT * FROM SomeTable ORDER BY country, duration, RAND()) a
CROSS JOIN (SELECT @counter:=0, @PrevCountry:='') Sub2
) Sub1
WHERE CountryCounter < 6

这是使用用户变量获取某个国家/地区每条记录的序列号,然后使用该序列号处理每个国家/地区第 1 个 6 之后的任何记录。

未经测试。

关于mysql - 表中多个组的多个最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17145496/

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