在MySQL中选择Random Max

时间:2011-07-07 22:38:53

标签: mysql

我有这张桌子:

id    name    bid
1     Test1   5.50
2     Test2   5.50
3     Test3   5.49

我想选择出价最高的行。如果最高出价在另一行上相等,那么它应该随机选择一个最高出价行。

我试过了:

SELECT name,max(bid) FROM table ORDER BY rand()

输出:

id    name    bid
1     Test1   5.50

我的问题是永远不会显示id“2”因为某些原因我的查询只选择id“1”

3 个答案:

答案 0 :(得分:2)

SELECT name,bid
FROM table
WHERE bid=(SELECT max(bid) FROM table)
ORDER BY RAND()
LIMIT 1

应该做的伎俩。等待更优化的请求^^

答案 1 :(得分:2)

那是因为你正在使用一个聚合函数,它将所有东西都折叠成一行。您需要一个子选择:

SELECT *
FROM table
WHERE bid = (SELECT MAX(bid) FROM table)
ORDER BY rand()
LIMIT 1;

但也要注意why not to use ORDER BY RAND()。虽然如果只有少数结果,性能影响可能不足以打扰更改。

答案 2 :(得分:2)

在同一个查询中选择nameMAX(bid)没有任何意义:您要求在所有行中汇总的最高出价,加上未汇总的名称,因此根本不清楚哪个您要选择的行名称。 MySQL通常选择你想要的“正确”答案(其中一个拥有最高出价的行),但它不能保证,在所有其他数据库中失败,在ANSI SQL中无效。

要获取 最高出价行,请按出价排序并仅选择第一个结果。如果您想确保获得随机最高出价行而不是任意行,请在订单子句中添加随机因素:

SELECT name, bid
FROM table
ORDER BY bid DESC, RAND()
LIMIT 1