首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在mySQL中,如何返回限制为一定数量的组+唯一项的分组项列表

在mySQL中,如何返回限制为一定数量的组+唯一项的分组项列表
EN

Stack Overflow用户
提问于 2010-03-23 22:14:21
回答 1查看 283关注 0票数 1

好的,这可能有点难,但我会尽力解释的。听我说..。

我有一个包含多列的表,如下所示。

ITEM_ID - GROUP_ID

1-空

2-空

3-空

4-3

5-3

6-3

7- 21

8-6

9- 21

10 - 21

11 - 21

12 -4

13 -4

15 -6

16 -6

17 -6

19 -3

我想进入这个表并返回一个列表,如下所示:

1.)每一项都是独立的。

2.)每个项目都按组ID分组。

3.)结果被限制为总共5个组,每个空的项目被算作一个唯一的组。

4.)当返回一个组时,会返回所有具有相同组号的对象。

在这个例子中,我想返回:

1-空

2-空

3-空

4-3

5-3

6-3

19 -3

7- 21

9- 21

10 - 21

11 - 21

因此,项目1、2和3分别计为1个返回组,总共3个返回组。项目4、5、6和19都是组3,并计入一个退回组,使我们的总数达到4个组。项目7、9、10和11都是组21,并计入一个退回组,使我们的退回组总数达到5个,此时不再有组或单个项目(计为组)被退回。

我通常对SQL很在行,但这一点我完全搞不懂。

谢谢大家!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-24 03:07:24

这将返回您所请求的内容。内部子查询简单地过滤空值并分配一个唯一的“键”(一个负的id号)。它们被“限制”到前五个唯一的组ids,然后对子查询的一个副本进行联接,以返回我们需要的记录。然后,使用外部的子查询以请求的方式打印结果集。

代码语言:javascript
运行
复制
select a.item_id, case when a.group_id <= 0 then null else a.group_id end group_id 
from (
    select distinct group_id, item_id from test.so_test where group_id is not null 
    union
    (select  -item_id, item_id from test.so_test where group_id is null)
)  a inner join (
    select distinct group_id from test.so_test where group_id is not null 
    union
    (select  -item_id from test.so_test where group_id is null)
    order by group_id limit 0, 5
) b on a.group_id = b.group_id
order by case when a.group_id <= 0 then null else a.group_id end, a.item_id;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2500568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档