表1(游戏1):
Table: game1
id | score | user
1 | 7 | john
2 | 3 | alex
3 | 21 | annie
4 | 12 | max
表2(游戏2):
Table: game2
id | score | user
1 | 12 | john
2 | 50 | alex
3 | 2 | annie
4 | 9 | max
我想从每个桌面游戏中获取高分值,以获得类似的结果:
game1 | game2
21 | 50
答案 0 :(得分:2)
您可以使用子查询:
select (select max(score) from game1) as game1,
(select max(score) from game2) as game2
答案 1 :(得分:1)
试试这个;
select
(select max(score) from Table1) as Table1,
(select max(score) from Table2) as Table2
答案 2 :(得分:1)
水平扩展的结果集通过使用JOION关键字垂直使用UNION关键字来实现。你说你想要横向,所以这将是一个连接。如果在加入之前将每个表减少到一行,并且没有ON的连接是CROSS JOIN,则不需要任何连接条件
SELECT * FROM
(select max(score) as game1 from game1) a
CROSS JOIN
(select max(score) as game2 from game2) b
依此类推,你可以保持交叉加入任意数量的得分表,只会产生一行
如果你想要检索每个游戏中获得这些分数的人的名字,那么事情会变得更复杂但并非不可能:
SELECT * FROM
(select score as game1score, playername as game1winner from game1 ORDER BY score DESC LIMIT 1) a
CROSS JOIN
(select score as game2score, playername as game2winner from game2 ORDER BY score DESC LIMIT 1) b
希望你不会让两个人得分相同,因为这只会选择其中一个。当出现平局时获得单行结果集是令人头疼的问题
答案 3 :(得分:0)
如果您使用的是Oracle,也可以在from子句中使用DUAL:
SELECT (SELECT MAX(score) FROM game1) AS game1,
(SELECT MIN(score) FROM game2) AS game2
FROM DUAL;