我有这张桌子:
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”
答案 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)
在同一个查询中选择name
和MAX(bid)
没有任何意义:您要求在所有行中汇总的最高出价,加上未汇总的名称,因此根本不清楚哪个您要选择的行名称。 MySQL通常选择你想要的“正确”答案(其中一个拥有最高出价的行),但它不能保证,在所有其他数据库中失败,在ANSI SQL中无效。
要获取 最高出价行,请按出价排序并仅选择第一个结果。如果您想确保获得随机最高出价行而不是任意行,请在订单子句中添加随机因素:
SELECT name, bid
FROM table
ORDER BY bid DESC, RAND()
LIMIT 1