我是SQL新用户,需要您的帮助!我正在基于SQL数据库进行关系图分析,这是我唯一可以利用的资源。
我有这张桌子:
+-------+--------------+--------------+--------+
| name | has_rel_with | relationship | weight |
+-------+--------------+--------------+--------+
| Tom | Jerry | friends | 50 |
| Tom | Jerry | enemies | 90 |
| Jerry | Tom | enemies | 90 |
| Jerry | Tom | friends | 50 |
| Rick | Morty | grandpa | 50 |
| Morty | Rick | enemies | 50 |
| Rick | Beth | father | 100 |
+-------+--------------+--------------+--------+
Name Has_rel_with relationship weight
----------------------------------------------------
Tom Jerry enemies 90
Rick Morty grandpa 50
Rick Beth father 100
Name Has_rel_with weight
--------------------------------------
Tom Jerry 90
Rick Morty 50
Rick Beth 100
我尝试将CONCAT(name,has_rel_with)用作ID,但没有帮助。希望这段创建表代码可以节省您一些时间。
CREATE TABLE tmp (
name varchar(20)
, has_rel_with varchar(20)
, relationship varchar(50)
, weight int(3)
);
INSERT INTO tmp VALUES ("Tom", "Jerry", "friends", 50);
INSERT INTO tmp VALUES ("Tom", "Jerry", "enemies", 90);
INSERT INTO tmp VALUES ("Jerry", "Tom", "enemies", 90);
INSERT INTO tmp VALUES ("Jerry", "Tom", "friends", 50);
INSERT INTO tmp VALUES ("Rick", "Morty", "grandpa", 50);
INSERT INTO tmp VALUES ("Morty", "Rick", "enemies", 50);
INSERT INTO tmp VALUES ("Rick", "Beth", "father", 100);
答案 0 :(得分:0)
我相信这就是您想要的:
select if(name > has_rel_with, name, has_rel_with) as Name,
if(name > has_rel_with, has_rel_with, name) as Has_rel_with,
max(weight) as weight from tmp group by 1,2;
这将为您提供您所描述的第二张桌子。它将名称标准化,因此列name
和has_rel_with
将始终按顺序具有两个名称。然后,它按name
和has_rel_with
分组,并为该分组提供最高的weight
。