我有这 3 个 SQL 查询: 答:
SET @row_number = 0;
SELECT
(@row_number:=@row_number + 1) AS visit_ranking,
creator_id
FROM
db.games
ORDER BY db.games.visits desc
乙:
SET @row_number = 0;
SELECT
(@row_number:=@row_number + 1) AS favorite_ranking,
creator_id
FROM
db.games
ORDER BY db.games.favorite_count desc
C:
SET @row_number = 0;
SELECT
(@row_number:=@row_number + 1) AS upvote_ranking,
creator_id
FROM
db.games
ORDER BY db.games.up_votes desc
所有这些都可以单独工作,但我想创建一个查询来选择creator_id,visit_ranking,favorite_ranking,upvote_ranking。 但我不知道该怎么做,你能帮忙吗?
我尝试过这个连接查询:
SELECT
u.creator_id,
u.upvote_ranking,
f.favorite_ranking,
v.visit_ranking
FROM (
SELECT
(@row_number_upvotes := @row_number_upvotes + 1) AS upvote_ranking,
creator_id,
up_votes
FROM
db.games
ORDER BY
db.games.up_votes DESC
) AS u
JOIN (
SELECT
(@row_number_favorites := @row_number_favorites + 1) AS favorite_ranking,
creator_id,
favorite_count
FROM
db.games
ORDER BY
db.games.favorite_count DESC
) AS f ON u.creator_id = f.creator_id
JOIN (
SELECT
(@row_number_visits := @row_number_visits + 1) AS visit_ranking,
creator_id,
visits
FROM
db.games
ORDER BY
db.games.visits DESC
) AS v ON u.creator_id = v.creator_id;
但是惨败了
您使用的是过时的语法。当 MySQL 还没有窗口函数(如
RANK
、DENSE_RANK
和 ROW_NUMBER
)时,在 SQL 中使用计数变量是必要的。
这是一个具有最新语法的查询。我在这里使用
DENSE_RANK
是为了在领带上给予相同的排名。
SELECT
creator_id
DENSE_RANK() OVER (ORDER BY db.games.visits DESC) AS visit_ranking,
DENSE_RANK() OVER (ORDER BY db.games.favorite_count DESC) AS favorite_ranking,
DENSE_RANK() OVER (ORDER BY db.games.up_votes DESC) AS upvote_ranking
FROM db.games
ORDER BY creator_id;