比较相同列的值

  • 本文关键字:比较 sql sql-server
  • 更新时间 :
  • 英文 :


我需要比较数据并返回其中一列值低于另一列的行,问题是每次值都不同,最好在示例中显示,我有一个问题来描述,在理论上:

所以我需要选择每个男孩比游泳更喜欢的东西(sort order描述喜欢的顺序,1 =最喜欢的)。我有两个表格,一个是孩子的名字和性别,第二个是孩子喜欢的运动,如下所示。

每个孩子的顺序可能不同,我总是更需要他们喜欢什么而不是游泳的结果。

孩子表:

<表类> 名称 ID 年龄 性 tbody><<tr>凯特115道明>约翰216M汤姆36M

免责声明,我没有运行过这个,但这是我要采取的方法:

SELECT kids.name
, other_sports.sport
FROM kids
JOIN kids_sports swimming
ON kids.id = swimming.kid_id
AND sport = 'Swimming'
LEFT JOIN kids_sports other_sports
ON kids.id = other_sports.kid_id
AND other_sports.[ORDER] > swimming.[order];

你想知道每个孩子的游泳顺序是什么,通过连接到体育表,然后使用游泳的顺序,从other_sports中选择所有有更高的顺序值。

我使用[ ]围绕order作为SQL server的关键字。

从风格上讲,我可以把AND swimming.sport = 'Swimming'放在where子句中,但我觉得这更能说明我在这里要做的事情。

我使用左连接,所以如果孩子最喜欢的运动是游泳,他们仍然会出现在你的结果与null最喜欢的运动。将其设置为内连接将隐藏它,这取决于后面的内容

听起来像是课堂练习。下面是可能适合赋值的伪代码:

select ...
from kids inner join kid sports ... 
where order < (
select order from kid sports ks2
where <correlated match on kid id> and ks2.sport = 'swimming'
);

高级方法:

with data as (
select *,
min(case when sport = 'swimming' then order end) over (partition by k.id) as swim_pref
from kids k inner join kids_sports is on ks.Kid_ID = k.ID
)
select * from data
where order < swim_pref;

相关内容

  • 没有找到相关文章

最新更新