[英]Comparing values in two columns in same table and creating new column
这一定很容易查询,但由于某种原因,我无法获得正确的查询。 我正在使用 Oracle SQL。 我有一张桌子,上面有互相送礼物的人的详细信息,我想跟踪互相交换礼物的人。 我正在尝试比较同一张表中的两列。
桌子:
SenderId | Sender | ReceiverId | Receiver |
1 | Christen | 30 | Sharyn |
2 | Will | 5 | Madeline |
7 | Kim | 25 | Lee |
30 | Sharyn | 1 | Christen |
25 | Lee | 7 | Kim |
预期结果表:
Sender | Receiver | Exchanged_Gift
Christen | Sharyn | 1
Will | Madeline | 0
Kim | Lee | 1
由于有两组人交换了礼物,如果他们交换了礼物,则新列将有1,否则为0。
第一组——克里斯汀和莎琳都交换了礼物。
第二组——金和李也交换了礼物。
您可以简单地使用least
和greatest
function 如下:
Select case when count(1) = 1 then max(sender) else least(sender,receiver) end as sender,
case when count(1) = 1 then max(receiver) else greatest(sender,receiver) end as receiver,
count(1) - 1 as exchanged_gifts
From your_table
Group by least(sender,receiver), greatest(sender,receiver)
这有点棘手,因为当只有一行时,你想保持原来的顺序。 一种方法是使用union all
进行聚合:
select least(sender, receiver) as sender, greatest(sender, receiver) as receiver, 1 as exchanged
from t
group by least(sender, receiver), greatest(sender, receiver)
having count(*) = 2
union all
select sender, receiver, 0
from t
where not exists (select 1
from t t2
where t2.receiver = t.sender and t2.sender = t2.receiver
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.