【问题标题】:select random rows from group using mysql使用mysql从组中选择随机行
【发布时间】:2019-01-25 16:24:43
【问题描述】:

表格 - 产品变体

_id productid   productname    optionid  optionprice
1   1             product - 1   101        499
2   2             product - 2   105        499
3   1             product - 1   102        499
4   1             product - 1   103        499
5   2             product - 2   106        499
6   2             product - 2   107        499
7   1             product - 1   104        499
8   2             product - 2   108        499

我想通过使用上表中的 productid 列进行分组,并且每次执行时都期望随机行。

预期输出:

_id productid   productname   optionid  optionprice
3    1          product - 1    102         499
6    2          product - 2    107         499

_id productid   productname    optionid optionprice
2    2           product - 2    105       499
7    1           product - 1    104       499

希望在每次执行查询时按产品选择随机行。

提前谢谢你。

【问题讨论】:

  • 如果您正在寻找最大值或最小值而不是随机值,您知道如何解决问题吗?
  • @royg 看到链接的问题是关于 mssql,我不相信它是重复的(尽管我接受这个问题之前已经被问过)
  • @Strawberry 是的,SELECT MAX(optionprice) FROM (SELECT * FROM productvariant ORDER BY RAND()) temp GROUP BY temp.productid
  • @RoyG - 不确定,它是否重复,但您在上面建议的链接没有使用 group by 子句,实际上这里的问题是由于 group by。
  • !! @Rush1312 那是“不”!!

标签: mysql


【解决方案1】:

已经在这里回答:MYSQL Select One Random record from each Category

从上面的链接中获取想法。试试这个:

SELECT inner_nest.* FROM 
( SELECT * FROM productvariant ORDER BY RAND() ) AS inner_nest 
GROUP BY inner_nest.productid

【讨论】:

  • 我在哲学上对此表示反对,因为随机性和不确定性并不完全相同。也就是说,由于我无法描述差异,我正在撤回我的反对票。
  • 我试过这个,但不幸的是它不起作用。每次都获取相同的行。
  • @Rush1312 请检查:stackoverflow.com/a/38073130/2469308 这与您的问题相同。你能提供一个 SQLfiddle 吗?
  • @Rush1312 虽然这确实是一个“黑客”解决方案,但它违反 SQL 标准,但它应该工作 - 并且比“标准兼容”简单得多' 解决方案。 sqlfiddle.com/#!9/c10a83/1
  • @Strawberry - 是的,确实如此。正如您在示例中所示,我已经尝试过,但它对我不起作用。不确定它的 mysql 工作台版本是否有问题。我使用的是 6.3 版,即使我从示例中复制了您的语句,它也无法正常工作。我在另一个无法正常工作的在线编辑器中尝试过 - paiza.io/projects/VDOOLs3C1C5VrK_nRKZ3-Q?language=mysql
猜你喜欢
  • 2011-09-26
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 2012-02-05
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多