Группировка по разным оценкам и знаю, сколько они оценивают

0

У меня такая таблица:

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

То, чего я пытаюсь достичь, это создать таблицу, которая будет содержать:

  1. Для каждой проблемы весь диапазон оценок (от 0 до 100, даже если у кого-то не было 87 для этой проблемы, я хочу, чтобы она отображалась с 0-значным значением)
  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. Все остальные классы пусты:

Результат запроса Mysql

Как я могу сделать это сообщество SOV? :)

Теги:
mysql-workbench

1 ответ

0
Лучший ответ

Сначала вам нужен список оценок. Таким образом, вы создаете таблицу чисел со значениями от 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
  • 0
    Что ж, спасибо большое, я чему-то научился благодаря вам;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню