#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 баллов.
Затем вы можете применить обычную фильтрацию на уровне строк к людям. И вы можете перенести результат для переключения строк и столбцов в коде вашего приложения, если вам это нужно.