我有一个包含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
答案 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)