gpt4 book ai didi

mysql - Where 子句为每个 ID 最多选择两条记录

转载 作者:行者123 更新时间:2023-11-30 00:59:56 24 4
gpt4 key购买 nike

有一个电话号码表,其中包含 5 种不同类型的电话号码。每个电话号码类型均由 ID 标识。每个用户都可以拥有多个任意此类的电话号码。

我需要将每个用户 ID 的电话号码数量限制为最多 2 个号码,并提取 phonetype 为 1 或类型 2 的所有电话号码。

因此,最终结果应包含仅包含类型 1 或 2 电话号码的结果集,并且每个用户最多包含两个电话号码。

SELECT * FROM phone_nums
WHERE phonetype = 1 OR phonetype = 2
ORDER BY contid
HAVING MAX(count(id)) = 2

我很感激任何关于如何做到这一点的建议,

非常感谢!

最佳答案

有很多方法可以为这个问题编写一个执行且正确的查询。我认为这是解决您问题的一种可能性:

示例数据:

create table phonenumbers
( person_id number
, phone_id number
, the_number varchar2(240)
, phonetype number
)

insert into phonenumbers values ( 1, 1, 'first num', 1 )

insert into phonenumbers values ( 1, 2, 'second num', 1 )

insert into phonenumbers values ( 2, 3, 'third num', 1 )

insert into phonenumbers values ( 2, 4, 'fourth num', 1 )

insert into phonenumbers values ( 2, 5, 'fifth num', 1 )
select *
from phonenumbers
where (person_id, phone_id)
in
( select person_id
, min(phone_id)
from phonenumbers
where phonetype in (1, 2)
group
by person_id
union all
select person_id
, max(phone_id)
from phonenumbers
where phonetype in (1, 2)
group
by person_id
)

结果:

1    1    first num    1
1 2 second num 1
2 3 third num 1
2 5 fifth num 1

关于mysql - Where 子句为每个 ID 最多选择两条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20225338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com