作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个电话号码表,其中包含 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/
我是一名优秀的程序员,十分优秀!