聚合行号SQL查询

问题描述 投票:0回答:1

我有这 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;

但是惨败了

sql mysql join mysql-workbench
1个回答
0
投票

您使用的是过时的语法。当 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;
© www.soinside.com 2019 - 2024. All rights reserved.