这个查询是如何在mysql中完成的?

时间:2012-12-19 09:08:49

标签: mysql

鉴于下表......

ID  USER  NUM
 1     1   69
 2     2   75
 3     3    7
 4     1   31
 5     2   18
 6     3   70
 7     1   12
 8     2   23
 9     3   42

...哪个查询会返回每个USER的最低 NUM行?

结果看起来应该......

ID  USER  NUM
 7     1   12
 5     2   18
 3     3    7

无法绕过这一个!假设它有GROUP BY,但我尝试的一切都失败了...任何指针?

3 个答案:

答案 0 :(得分:3)

SELECT t.*
FROM tablename t
INNER JOIN (SELECT user, MIN(num) num
FROM tablename
GROUP BY user) x ON t.user = x.user AND t.num = x.num

SELECT t1.*
FROM tablename t1
LEFT JOIN tablename t2 ON t1.user = t2.user AND t1.num > t2.num
WHERE t2.id IS NULL

答案 1 :(得分:0)

SELECT ID , MIN(NUM) as MIN_NUM , USER FROM usertable GROUP BY USER

查看演示http://sqlfiddle.com/#!2/ce2fd/1

答案 2 :(得分:0)

HEre是另一种方法。 更新正确的REREFERENCE

查询

select b.id, a.user, a.minnum from 
mytable as b
join 
(select user, min(num) as minnum
 from mytable
 group by user
) as a
on b.user = a.user
where b.num = a.minnum
order by a.minnum asc
limit 3
;

结果:

  ID    USER    MINNUM
3   3   7
7   1   12
5   2   18