MySQL : How to get the sum columns by name of alias

标签 mysql sql

我在这里有一个查询,我收到一个错误,别名显示未知列,这有什么问题。我需要获得 16_judge_61 、 16_judge_62 、 16_judge_63 的总和

SELECT s.contestant_number, c.contestant_name, j.judge_name, 

SUM(CASE WHEN s.crit_id =17 AND s.judge_id =  '61' THEN score END ) AS 16_judge_61, 
SUM(CASE WHEN s.crit_id =17 AND s.judge_id =  '62' THEN score END ) AS 16_judge_62,
SUM(CASE WHEN s.crit_id =17 AND s.judge_id =  '63' THEN score END ) AS 16_judge_63,

(16_judge_61 + 16_judge_62 + 16_judge_63) as total //<--here is the problem
 //<--i also tried (sum(16_judge_61) + sum(16_judge_62) + sum(16_judge_63))as total not working as well


FROM tbl_score s INNER JOIN tbl_contestant c ON s.contestant_number = c.contestant_number
INNER JOIN tbl_judges j ON j.judge_id = s.judge_id
WHERE c.gender =  'male'
AND c.con_id = s.con_id
AND j.judge_id =62
GROUP BY s.contestant_number

最佳答案

您的错误是由于尝试在定义别名的同一 SELECT 子句中使用别名而导致的。您不能执行此操作,因为尚未计算别名。

对此问题的下意识 react 是将 16_judge_6116_judge_6216_judge_63 的三个 CASE 语句加在一起。但您可以通过认识到可以使用 WHERE IN 作为三个 judge_id 值将这三个条件组合成一个 CASE 语句来对此进行改进。

尝试这个查询:

SELECT s.contestant_number,
       c.contestant_name,
       j.judge_name,
       SUM(CASE WHEN s.crit_id = 17 AND s.judge_id IN (61,62,63)
                THEN score END ) AS total
FROM ...

关于MySQL : How to get the sum columns by name of alias,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39436692/

相关文章:

php - 尝试在 mysql 查询中使用多个 WHERE 命令 [不工作]

mysql - 从 Oracle 查询 MySQL 需要在字段名称周围加上引号

sqlite - 从sqlite表中选择唯一记录

mysql - 操作数应包含 1 列或语法错误

php - 购物车数据库设计: adding functionality for quantities by size

mysql - Asp.net 5 Vnext 和 Mysql

sql - oracle中如何添加长度为5000的列

javascript - 如何在sequelize中选择案例查询?

php - 代码点火器 : update function model and controller

mysql - 如何在MySQL中的父表(Tb2)的子表(Tb1)中插入数据,该父表(Tb2)也是子表(Tb1)的父表(Tb2)?