gpt4 book ai didi

mysql - 从数据库中获取最小值并在 MySQL 中随机化顺序

转载 作者:行者123 更新时间:2023-11-29 16:47:18 25 4
gpt4 key购买 nike

我有一张剧院演出的报价表。每场演出可能有多个报价,但我会尝试随机抽取 6 个价格最低的报价。可能有大约 20 多个节目,每个节目大约有 3 个优惠,我想要 6 个独特的随机节目的最低价格。

我可以使用 ORDER BY price 轻松找到最低价格,但这意味着我无法使用 ORDER BY RAND() 来将它们混合起来。我怀疑我需要做一个 UNION 或其他什么,但无法理解它。

我当前的查询如下所示:

SELECT * FROM `offers` GROUP BY `showID` ORDER BY `price` LIMIT 6

这会获得 6 个最低价格,并且 GROUP 确保有 6 个不同的节目,但始终是相同的 6 个节目。如果我尝试这个:

SELECT * FROM `offers` GROUP BY `showID` ORDER BY RAND() LIMIT 6

我得到了 6 个随机节目,但不一定是最低价格。如何将这些结合起来以获得最低价格和随机结果?

编辑以添加请求的示例数据:

id | showID | offer          | price
1 | 1234 | 10% Off Band A | 15.00
2 | 1234 | 15% Off Band B | 25.00
3 | 4321 | 10% Off Band B | 20.00
4 | 1234 | 25% Off Band C | 30.00
5 | 6666 | Free Upgrade | 13.00
6 | 6666 | Premium Seats | 40.00
7 | 4321 | Half Price | 12.00

不是完整的数据样本,但在上面的示例中存在三个独特的节目,因此我希望 ids 1、5 和 7 作为这些节目的最便宜报价,但以随机顺序返回。在完整的数据集中,大约有 20 个具有多个优惠的独特节目,我只想要其中随机的 6 个。

最佳答案

这应该有效。然而,如果我是你,我会在应用程序逻辑中实现它,而不是试图将其全部塞入查询中,即使只是为了可读性。

SELECT * FROM offers WHERE id IN (
SELECT
(SELECT id
FROM offers
WHERE showID = show_ids.showID
AND price = (SELECT MIN(price) FROM offers WHERE showID = show_ids.showID)
LIMIT 1) offer_id
FROM (
SELECT DISTINCT showID
FROM offers
ORDER BY RAND() LIMIT 6
) show_ids
);

关于mysql - 从数据库中获取最小值并在 MySQL 中随机化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53032406/

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