Удалить столбец в результирующем наборе ОБЪЕДИНЕНИЯ на основе суммы значений столбцов

#mysql #sql

#mysql #sql

Вопрос:

Я написал запрос, который я перефразирую в нижней части этого вопроса. Он правильно получает общий балл за ряд вопросов, заданных людям. Итак, результирующие наборы выглядят следующим образом:

             | David |  Bill  | Mary | James
Question 1  |   10  |   10   |  0   |   0
Question 2  |   10  |   20   |  0   |   0
Question 3  |   10  |   30   |  0   |   0
Question 4  |   0   |   20   |  0   |   1
  

Что мне нужно сделать, и я не могу понять, как удалить всех людей из результирующего набора, где у них нулевые оценки по всем заданным вопросам. Таким образом, ‘Mary’ будет удален из приведенных выше результатов, оставив:

             | David |  Bill  | James
Question 1  |   10  |   10   |   0
Question 2  |   10  |   20   |   0
Question 3  |   10  |   30   |   0
Question 4  |   0   |   20   |   1
  

Вот запрос, который нуждается в дальнейшей разработке:

 SELECT
    `questions`,
    SUM(`0`) AS `David`,
    SUM(`1`) AS `Bill`
FROM(
(SELECT
    ROUND(((SUM(`sm`.`ScorecardMark`) * `sc`.`ScoreCriteriaWeight`)/(COUNT(`sm`.`ScorecardMark`) * `sc`.`ScoreCriteriaWeight`))*100) AS `0`,
    0 AS `1`
FROM
    `tables`
WHERE
    `clauses`
GROUP BY
    `questions`)
UNION
(SELECT
    0 AS `0`,
    ROUND(((SUM(`sm`.`ScorecardMark`) * `sc`.`ScoreCriteriaWeight`)/(COUNT(`sm`.`ScorecardMark`) * `sc`.`ScoreCriteriaWeight`))*100) AS `1`
FROM
    `tables`
WHERE
    `clauses`
GROUP BY
    `questions`)
)  AS `tbltotals`
GROUP BY
    `questions`
  

Комментарии:

1. Данные и представление данных — это две разные вещи. Но в любом случае вы можете сделать это в двух запросах. Один запрос для получения нужных вам столбцов и другой запрос для получения необходимого результата.

2. Я понимаю, что для составления запроса вам нужно заранее знать список людей. Тогда почему вы не получаете только тех людей, у которых был какой-то результат? Затем вы можете объединить только подзапросы, содержащие этих людей.

3. Согласен, Шедал, спасибо за нестандартное мышление, и это именно то, что я сделал.

4. Спасибо, Каролис, ты сказал то же самое.

5. @user783322: вы можете опубликовать свое решение и принять его в качестве ответа, а затем другие люди с аналогичной проблемой смогут увидеть, как вы ее решили.

Ответ №1:

Я думаю, что лучшим подходом было бы выбрать вопросы в виде столбцов, так как должно быть проще получить список необходимых вопросов, чем список людей, набравших больше 0 баллов.

Затем вы можете применить обычную фильтрацию на уровне строк к людям. И вы можете перенести результат для переключения строк и столбцов в коде вашего приложения, если вам это нужно.