如何在 SQL Workbench 中通过 2 个外键合并 2 行?
How to merge 2 rows by 2 foreign keys in SQL Workbench?
所以我有一个数据库,其中两个表之间有双重连接。
现在我必须找出哪两个人彼此之间发送的消息最多。
我喜欢这样:
create view temp as select Uporabnik_idUporabnik1,Uporabnik_idUporabnik2, count(Sporocilo.id) as
st_sporocil from Sporocilo group by Sporocilo.Uporabnik_idUporabnik1,
Sporocilo.Uporabnik_idUporabnik2; select * from temp;
问题是这只计算一种方式的通信。因此它将计算 user1 发送给 user2 的消息数以及 user2 发送给 user1 的消息数作为 2 个不同的行。
那么如何合并行 row1 fk1=row2 fk2 和 row2 fk1=row1 fk2 的行?
create view temp as
select Uporabnik_idUporabnik1,Uporabnik_idUporabnik2,count(idSporocilo) as st_sporocil
FROM
( SELECT Uporabnik_idUporabnik1,Uporabnik_idUporabnik2,idSporocilo from Sporocilo
UNION
SELECT Uporabnik_idUporabnik2,Uporabnik_idUporabnik1,idSporocilo from Sporocilo
) t
WHERE Uporabnik_idUporabnik1 > Uporabnik_idUporabnik2
GROUP BY Uporabnik_idUporabnik1,Uporabnik_idUporabnik2
反向的 UNION 将为您提供 2 条消息的数量。因为您会将发送者、接收者和接收者、发送者分组。
现在的问题是你仍然会得到两行。 F.ex:
Uporabnik_idUporabnik1,Uporabnik_idUporabnik2,st_sporocil
1,10,4
10,1,4
为了只显示一行,我添加了过滤器 Uporabnik_idUporabnik1 > Uporabnik_idUporabnik2
这将只显示第一行。小心,因为这会抑制自我对话(发送者与接收者相同)
所以我有一个数据库,其中两个表之间有双重连接。
现在我必须找出哪两个人彼此之间发送的消息最多。
我喜欢这样:
create view temp as select Uporabnik_idUporabnik1,Uporabnik_idUporabnik2, count(Sporocilo.id) as
st_sporocil from Sporocilo group by Sporocilo.Uporabnik_idUporabnik1,
Sporocilo.Uporabnik_idUporabnik2; select * from temp;
问题是这只计算一种方式的通信。因此它将计算 user1 发送给 user2 的消息数以及 user2 发送给 user1 的消息数作为 2 个不同的行。
那么如何合并行 row1 fk1=row2 fk2 和 row2 fk1=row1 fk2 的行?
create view temp as
select Uporabnik_idUporabnik1,Uporabnik_idUporabnik2,count(idSporocilo) as st_sporocil
FROM
( SELECT Uporabnik_idUporabnik1,Uporabnik_idUporabnik2,idSporocilo from Sporocilo
UNION
SELECT Uporabnik_idUporabnik2,Uporabnik_idUporabnik1,idSporocilo from Sporocilo
) t
WHERE Uporabnik_idUporabnik1 > Uporabnik_idUporabnik2
GROUP BY Uporabnik_idUporabnik1,Uporabnik_idUporabnik2
反向的 UNION 将为您提供 2 条消息的数量。因为您会将发送者、接收者和接收者、发送者分组。 现在的问题是你仍然会得到两行。 F.ex:
Uporabnik_idUporabnik1,Uporabnik_idUporabnik2,st_sporocil
1,10,4
10,1,4
为了只显示一行,我添加了过滤器 Uporabnik_idUporabnik1 > Uporabnik_idUporabnik2
这将只显示第一行。小心,因为这会抑制自我对话(发送者与接收者相同)