У меня такая таблица:
Problem UserID Grade
Probleme1 ID1 33
Probleme1 ID2 100
Probleme1 ID4 57
Probleme1 ID6 57
Probleme1 ID78 24
Probleme1 ID5 24
Probleme2 ID1 37
Probleme2 ID12 88
Probleme2 ID6846 100
Probleme2 ID2 2
То, чего я пытаюсь достичь, это создать таблицу, которая будет содержать:
Поэтому я пытаюсь сделать что-то вроде этого:
DROP TABLE IF EXISTS Problem_Grades_Point;
CREATE TABLE Problem_Grades_Point (
Platform VARCHAR(20),
AnalyticsDomain VARCHAR(255),
ShortTitle VARCHAR(255),
Problem VARCHAR(255),
Grade0 INT,
Grade10 INT,
Grade20 INT,
INDEX (Problem)
) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_bin;
INSERT INTO Problem_Grades_Point
SELECT
Platform,
AnalyticsDomain,
ShortTitle,
Problem,
COUNT(Problem) AS Grade0,
0 as Grade10,
0 as Grade20
FROM First_Attempt_Problem_Grades
WHERE First_Grade = 0
GROUP BY Problem
UNION ALL
SELECT
Platform,
AnalyticsDomain,
ShortTitle,
Problem,
0 as Grade0,
COUNT(t.Problem) AS Grade10,
0 as Grade20
FROM First_Attempt_Problem_Grades t
WHERE First_Grade = 10
GROUP BY Problem
UNION ALL
SELECT
Platform,
AnalyticsDomain,
ShortTitle,
Problem,
0 as Grade0,
0 as Grade10,
COUNT(Problem) AS Grade20
FROM First_Attempt_Problem_Grades
WHERE First_Grade = 20
GROUP BY Problem
Конечно, он не содержит всего, что я хочу, и, конечно же, он не работает. Он отображает только результат для оценки 0. Все остальные классы пусты:
Как я могу сделать это сообщество SOV? :)
Сначала вам нужен список оценок. Таким образом, вы создаете таблицу чисел со значениями от 1 до 100 и называете ее Grades
Как получить список чисел в MySQL?
Теперь ты:
SELECT P.Problem,
G.Grade,
COUNT(Y.UserID)
FROM ( SELECT DISTINCT Problem
FROM YourTable) as P -- if you have a table 'Problems' you can use it instead
CROSS JOIN Grades as G
LEFT JOIN YourTable Y
ON P.Problem = Y.Problem
AND G.Grade = Y.Grade
GROUP BY P.Problem, G.Grade