复杂的MySQL查询

时间:2015-05-07 12:40:21

标签: mysql

我有数据:

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中执行此操作,我该怎么做?

5 个答案:

答案 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;