我有数据:
id item value 1 4 10 2 4 30 3 5 10 4 4 30 5 5 40
首先,我想得到一个结果,所有项目都是4
1 4 10 2 4 30 4 4 30
然后我想选择最大的值,如果不止一个得到它们。
2 4 30 4 4 30
然后选择随机的。
2 4 30
或
4 4 30
我想在一个SQL中执行此操作,我该怎么做?
答案 0 :(得分:1)
http://sqlfiddle.com/#!9/040ff/3
SELECT t.*
FROM table1 t
LEFT JOIN table1 t2
ON t.item=t2.item
AND t.value<t2.value
WHERE t.item=4 and t2.value IS NULL
ORDER BY RAND()
LIMIT 1;
答案 1 :(得分:1)
SELECT x.*
FROM my_table x
JOIN
( SELECT item,MAX(value) max_value FROM my_table GROUP BY item) y
ON y.item = x.item
AND y.max_value = x.value
WHERE x.item = 4
ORDER
BY RAND() LIMIT 1;
答案 2 :(得分:0)
试试这个
SELECT id, item, value FROM table1 WHERE item = 4 GROUP BY id ORDER BY value DESC, rand() LIMIT 1;
编辑:更改SQL Thx @Alex以指出我的错误。这是SQL Fiddle
答案 3 :(得分:0)
SELECT t.id, t.item, t.value
FROM my_table t
WHERE t.item = 4
AND t.value = (SELECT MAX(ti.value) FROM my_table ti WHERE t.item = ti.item)
ORDER BY rand()
LIMIT 1
答案 4 :(得分:0)
http://sqlfiddle.com/#!9/95517/6
感谢你们给出了很好的答案,但是很多人都加入了,在与我的同事沟通后,我得到了另一个没有加入的答案。
SELECT * FROM table1
WHERE
value = (SELECT max(value) FROM table1
WHERE item = 4)
AND item = 4
ORDER BY RAND()
LIMIT 1;