1

鉴于下表...

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

...哪个查询将为每个用户返回具有最低NUM 的行?

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

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

不能把我的头绕在这个上面!假设它有一个GROUP BY,但我尝试的一切都失败了......任何指针?

4

3 回答 3

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
于 2012-12-19T09:11:04.510 回答
0
SELECT ID , MIN(NUM) as MIN_NUM , USER FROM usertable GROUP BY USER

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

于 2012-12-19T09:11:57.913 回答
0

这是另一种方法。更新了正确的参考

询问

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
于 2012-12-19T09:17:53.853 回答