9

假设我有这张桌子:

group_id | image | image_id |
-----------------------------
23        blob       1
23        blob       2
23        blob       3
21        blob       4
21        blob       5
25        blob       6
25        blob       7

如何获得每个组 id 中只有 1 个的结果?在这种情况下,一个组 id 可能有多个图像,我只想要一个结果group_id的一个结果

我尝试了不同的,但我只会得到 group_id。图像的最大值也不起作用。

4

3 回答 3

27

Oracle中没有可与BLOBs 一起使用的标准聚合函数,因此GROUP BY解决方案将不起作用。

ROW_NUMBER()在子查询中尝试这个。

SELECT inn.group_id, inn.image, inn.image_id
FROM
(
    SELECT t.group_id, t.image, t.image_id, 
        ROW_NUMBER() OVER (PARTITION BY t.group_id ORDER BY t.image_id) num
    FROM theTable t
) inn
WHERE inn.num = 1;

image_id上面应该返回每个组的第一行(基于)。

SQL小提琴

于 2013-11-12T03:43:41.973 回答
1
SELECT  group_id, image, image_id
FROM    a_table
WHERE   (group_id, image_id) IN
        (
            SELECT  group_id, MIN(image_id)
            FROM    a_table
            GROUP   BY
                    group_id
        )
;
于 2013-11-12T09:37:53.310 回答
0
select * from 
  (select t1.*,
   ROW_NUMBER() OVER (PARTITION BY group_id ORDER BY group_id desc) as seqnum
   from tablename t1) 
where seqnum=1;
于 2020-04-02T17:45:37.503 回答