You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL查询选取年龄之和为60的两行数据?

问题描述

我的表数据如下:

id      name         age          role
---------------------------------------
1       Rahul            20              1
2       Karan            35              0
3       Vivek            47              0
4       Shubham          40              1
5       Paras            87              1
6       Arjun            18              1
7       Ayush            28              0

我想要选取年龄之和等于60的两行数据,比如上表中的第1行(Rahul,20岁)和第4行(Shubham,40岁)。请问对应的SQL查询语句是什么?

我尝试了以下语句,但没有得到正确结果:

select * from form_data where age=(select age from form_data having sum(age)=60);
解决方案

你尝试的语句逻辑有误:having sum(age)=60是对全表年龄求和,全表年龄总和远大于60,且子查询返回的结果无法匹配外层的age=条件,自然得不到正确数据。

要找到年龄之和为60的两行数据,最直接的方法是用自连接,将表与自身关联,同时避免重复组合:

SELECT a.*, b.*
FROM form_data a
JOIN form_data b ON a.id < b.id
WHERE a.age + b.age = 60;

这里a.id < b.id的作用是防止出现重复结果(比如同时返回a=1,b=4和a=4,b=1)。

如果只需要单独输出符合条件的每一行,不需要同时展示配对的两行信息,也可以用子查询实现:

SELECT *
FROM form_data
WHERE age IN (
    SELECT 60 - age
    FROM form_data
)
AND id NOT IN (
    SELECT id
    FROM form_data
    WHERE age * 2 = 60
);

这段语句里的额外条件是为了排除年龄刚好为30的行——这类行的60 - age等于自身年龄,会导致自己和自己匹配,而我们需要的是两行不同的数据。

内容的提问来源于stack exchange,提问作者Ritesh Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:39:39