如何根据条件获取别名字段的 SUM?

How can I take the SUM of an alias field based on a condition?

总的来说,我是 MySQL 和 SQL 的新手,我能够让我的部分查询按预期工作,但我不确定也不确定如何精确地转换我的查询进入我的目标的子查询。

关于数据库的上下文: 我正在帮助为我的大学会议设计一个应用程序,他们希望评委能够对一张由演示者拥有的海报进行评分,并且演示者可以拥有多张海报。有五个table。

Judge
Poster
Presenter
Owns
Scores

关于查询的上下文: 下面的查询输出演示者的姓名和来自分数 table

的特定记录值的总和
    SELECT
    presenter.presenter_name,
    (visual + clarity + thoroughness
     + breadth + depth + quality
     + discussion + understanding + overall)
    AS rec_tot
    FROM scores
    INNER JOIN judge ON judge.judge_id = scores.judge_ID
    INNER JOIN poster ON poster.poster_ID = scores.poster_ID
    INNER JOIN owns ON poster.poster_ID = owns.poster_ID
    INNER JOIN presenter ON presenter.presenter_ID = owns.presenter_ID
    ORDER BY presenter.academic_level, presenter.area_of_study,
    presenter.category; 

这将输出以下内容:

presenter_name | rec_tot
------------------------
nameOne        | 17
nameTwo        | 27
nameTwo        | 18
nameTwo        | 16
nameThree      | 9

我想接受此查询并输出 SUM(rec_tot) 按 presenter_name 分组,例如:

presenter_name | rec_tot
------------------------
nameOne        | 17
nameTwo        | 61
nameThree      | 9

以下是我尝试解决此问题的尝试:

    SELECT a.*, SUM(rec_tot) AS total
    FROM (SELECT (visual + clarity + thoroughness + breadth
                 + depth + quality + discussion
                 + understanding + overall) AS rec_tot
    FROM scores
    INNER JOIN judge ON judge.judge_id = scores.judge_ID
    INNER JOIN poster ON poster.poster_ID = scores.poster_ID
    INNER JOIN owns ON poster.poster_ID = owns.poster_ID
    INNER JOIN presenter ON presenter.presenter_ID = 
    owns.presenter_ID
    ORDER BY presenter.academic_level, presenter.area_of_study, 
    presenter.category
    ) AS a;

然而,这只是给我所有条目的总和:

rec_tot | total
----------------
  27    |  87

但是每次我尝试使用 GROUP BY presenter.presenter_name 引用在子查询中生成的 table 时,我都会得到 'ERROR: 1054. Unknown column "presenter.presenter_ID" in "GROUP BY"'。所以我认为 parent 查询无法访问 child 查询,这导致我尝试在 parent 查询上同时使用 child 中的 FROM 子句,但是,然后总数输出为 435,即 5x87...所以这很令人困惑。

此外,删除别名 'a' 我收到错误 'ERROR: 1284. Every derived table must have its own alias'

简而言之,我对别名、子查询的范围以及如何正确实现它们感到非常困惑。

你差不多明白了,你只需要通过以下方式添加组:

select a.presenter_name,sum(a.rec_tot)
from 
(SELECT
    presenter.presenter_name as presenter_name,
    (visual + clarity + thoroughness
     + breadth + depth + quality
     + discussion + understanding + overall)
    AS rec_tot
    FROM scores
    INNER JOIN judge ON judge.judge_id = scores.judge_ID
    INNER JOIN poster ON poster.poster_ID = scores.poster_ID
    INNER JOIN owns ON poster.poster_ID = owns.poster_ID
    INNER JOIN presenter ON presenter.presenter_ID = owns.presenter_ID
    ORDER BY presenter.academic_level, presenter.area_of_study,
    presenter.category) a
group by a.presenter_name