根据其他列选择列中的值
Posted
技术标签:
【中文标题】根据其他列选择列中的值【英文标题】:Selecting values in columns based on other columns 【发布时间】:2020-03-07 14:26:35 【问题描述】:我有两张表,信息和交易。 信息看起来像这样:
customer ID Postcode
1 ABC 123
2 DEF 456
交易看起来像这样:
customer ID day frequency
1 1/1/12 3
1 3/5/12 4
2 4/6/12 2
3 9/9/12 1
我想知道每个邮政编码在哪一天出现的频率最高。
我知道如何从两个不同的表中引用,但我不太确定如何根据它们的值将多个列引用到其他列。
输出应该是这样的:
customer ID postcode day frequency
1 ABC 123 3/5/12 4
2 DEF 456 4/6/12 2
3 GHI 789 9/9/12 1
等等。
【问题讨论】:
两个表,不是数据库。 “星期几”与您的问题有什么关系? 谢谢,已修改。我的意思是一天 【参考方案1】:您可以使用相关子查询进行过滤:
select
i.*,
t.day,
t.frequency
from info i
inner join transactions t on t.customerID = i.customerID
where t.frequency = (
select max(t.frequency)
from info i1
inner join transactions t1 on t1.customerID = i1.customerID
where i1.postcode = i.postcode
)
或者,如果你的 RBDMS 支持窗口函数,你可以使用rank()
:
select *
from (
select
i.*,
t.day,
t.frequency,
rank() over(partition by i.postcode order by t.frequency desc)
from info i
inner join transactions t on t.customerID = i.customerID
) t
where rn = 1
【讨论】:
以上是关于根据其他列选择列中的值的主要内容,如果未能解决你的问题,请参考以下文章