Как я могу взять СУММУ поля псевдонима на основе условия? - PullRequest
0 голосов
/ 27 апреля 2019

Я новичок в MySQL и SQL в целом, мне удалось заставить часть моего запроса работать как задумано, но я не уверен и не уверен, как точно превратить мой запрос в подзапрос для моих целей.

Контекст относительно базы данных: я помогаю разработать приложение для конференции в моем колледже, где они хотят, чтобы судьи могли оценивать постер, принадлежащий докладчику (-ям), и у докладчика может быть несколько постеров.Существует пять таблиц.

Judge
Poster
Presenter
Owns
Scores

Контекст относительно запроса: запрос ниже выводит имя докладчика и сумму значений этой конкретной записи из таблицы результатов

    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_name Я получаю «ОШИБКА: 1054. Неизвестный столбец« Presenter.presenter_ID »в« GROUP BY »».Поэтому я решил, что родительский запрос не может получить доступ к дочернему запросу, что заставляет меня попытаться использовать предложение FROM дочернего элемента в родительском запросе вместе, однако итоговое значение выводится как 435, что составляет 5x87 ... так чтосбивает с толку.

Кроме того, удаляя псевдоним 'a' Я получаю сообщение об ошибке 'ОШИБКА: 1284. Каждая производная таблица должна иметь свой собственный псевдоним'

Короче говоря, я очень смущенобъем псевдонимов, подзапросов и способы их правильной реализации.

1 Ответ

0 голосов
/ 27 апреля 2019

Вы почти получили это, вам нужно добавить группу только:

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
...