SQL顺序由一列然后分组

时间:2017-01-06 05:40:21

标签: sql

我有一个包含id,category和position列的表:

id | cat | pos
--------------
01 | ct1 | 2
02 | ct1 | 3
03 | ct2 | 1
04 | ct1 | 1
05 | ct2 | 2

我想从每个类别中选择位置最低的行。因此,根据这些数据,我应该得到身份证03和04,因为他们是每个类别的第1位。

我看过类似的帖子但是有轻微的曲折使得很难翻译知识,例如一个建议的解决方案只有两个组,所以他们有一个固定的UNION作为选择的答案,这对我来说是类别可以增长。一个不错的解释会很好,因为我不明白以下为什么不起作用。

SELECT id,pos,title,cat,des,url,urltext 
FROM gallery_items
GROUP BY cat
ORDER BY pos ASC

1 个答案:

答案 0 :(得分:2)

一种方法使用连接到子查询,该子查询找到每个类别的最小位置:

SELECT t1.*
FROM gallery_items t1
INNER JOIN
(
    SELECT cat, MIN(pos) AS min_pos
    FROM gallery_items
    GROUP BY cat
) t2
    ON t1.cat = t2.cat AND
       t1.pos = t2.min_pos

另一种方法是通过相关子查询:

SELECT t1.*
FROM gallery_items t1
WHERE t1.pos = (SELECT MIN(pos) FROM gallery_items t2 WHERE t1.cat = t2.cat)