添加您在mysql中创建的列?

添加您在mysql中创建的列?,mysql,sql,Mysql,Sql,假设我有一个mysql语句,如下所示: SELECT username, @n := @n + 1 ranking, `1st places`, `2nd places`, `3rd places`, `top5`, `top3 FROM ( SELECT username, SUM(CASE WHEN rating = 1 THEN 1 ELSE 0 END) `1st places`, SUM(CASE WHEN rating = 2 THEN 1 ELSE 0 END) `2nd pl

假设我有一个mysql语句,如下所示:

  SELECT username, @n := @n + 1 ranking, `1st places`, `2nd places`, `3rd places`, `top5`, `top3
FROM
(
SELECT username,
SUM(CASE WHEN rating = 1 THEN 1 ELSE 0 END) `1st places`,
SUM(CASE WHEN rating = 2 THEN 1 ELSE 0 END) `2nd places`,
SUM(CASE WHEN rating = 3 THEN 1 ELSE 0 END) `3rd places`,
SUM(CASE WHEN rating < 6 THEN 5 ELSE 0 END) `top5`,
SUM(CASE WHEN rating < 4 THEN 5 ELSE 0 END) `top3`
FROM Table1
GROUP BY username
ORDER BY `1st places` DESC
) q, (SELECT @n := 0) n

如何将我在该sql语句中创建的名为“1stplaces”+“2ndplaces”+“3rdplaces”的列相加,并创建另一个名为total finishes的列?看起来很容易,但我似乎想不出来

我很确定,您不能在同一个SELECT查询中重复使用具有计算值的字段,但是可以选择将其包装到其他子查询中:

SELECT username, @n := @n + 1 ranking, `1st places`, `2nd places`, `3rd places`, `top5`, `top3
FROM
(
    SELECT
    *,
    `1st places`+`2nd places`+`3rd places` `total finishes`
    FROM (
        SELECT username,
        SUM(CASE WHEN rating = 1 THEN 1 ELSE 0 END) `1st places`,
        SUM(CASE WHEN rating = 2 THEN 1 ELSE 0 END) `2nd places`,
        SUM(CASE WHEN rating = 3 THEN 1 ELSE 0 END) `3rd places`,
        SUM(CASE WHEN rating < 6 THEN 5 ELSE 0 END) `top5`,
        SUM(CASE WHEN rating < 4 THEN 5 ELSE 0 END) `top3`
        FROM Table1
        GROUP BY username
        ORDER BY `1st places` DESC
    )
)
q, (SELECT @n := 0) n

还没有尝试,但…

您可以将它们添加到一起,并为该额外列提供别名:-

SELECT username, @n := @n + 1 ranking, `1st places`, `2nd places`, `3rd places`, `top5`, `top3, `1st places` + `2nd places` + `3rd places` AS `total finishes`
FROM
(
SELECT username,
SUM(CASE WHEN rating = 1 THEN 1 ELSE 0 END) `1st places`,
SUM(CASE WHEN rating = 2 THEN 1 ELSE 0 END) `2nd places`,
SUM(CASE WHEN rating = 3 THEN 1 ELSE 0 END) `3rd places`,
SUM(CASE WHEN rating < 6 THEN 5 ELSE 0 END) `top5`,
SUM(CASE WHEN rating < 4 THEN 5 ELSE 0 END) `top3`
FROM Table1
GROUP BY username
ORDER BY `1st places` DESC
) q, (SELECT @n := 0) n

我不太明白。评级<4与评级=1重叠,评级<6部分重叠。你能给出一些预期输出的示例数据,看看你想做什么吗?所以我想要的是一个点系统。例如:假设某人排名第一,aka评分=1,那么他们排名第一就得1分,排名前5名的aka评分<6分,他们也得5分,排名前3名的aka评分<4分,他们总共得11分。我现在意识到这是多么愚蠢,因为我输入了所有这些,但我想有办法做到这一点吗?即使想起来了,我也不需要它。