2017-12-12 2 views
0

ich diese Art der Tabelle haben:Gruppierung von unterschiedlicher Güte und wissen, wie viel Grad sind sie

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 

Was ich zu erreichen bin versucht, es ist eine Tabelle zu erstellen, die enthält:

  1. Für jedes Problem, die gesamte Palette von Noten (von 0 bis 100, auch wenn niemand hatte eine 87 für dieses Problem, ich will es mit einem Wert 0 angezeigt werden)
  2. Für jede Klasse (für jedes Problem), die Anzahl der Personen, die diese Note erhalten haben.

So habe ich versuchen smth wie dies zu tun:

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 

Natürlich ist es nicht alles I und natürlich wollen, es funktioniert nicht. Es zeigt nur das Ergebnis für die Klasse 0. Alle anderen Sorten leer sind wie folgt:

The Mysql's query result

Wie kann ich diese SOV Gemeinschaft tun? :)

+0

Muss ich unbedingt eine Prozedur erstellen? – Joff

+0

Was bedeuten 'SOV'? –

+0

Mmf, mein Schlechter, ich wollte SOF sagen (Stack Over Flow) – Joff

Antwort

0

Zuerst benötigen Sie eine Liste von Noten. So erstellen Sie eine Tabelle mit Zahlen Noten von 1 bis 100 und nennen es Grades

How do I get a list of numbers in MySQL?

Jetzt können Sie tun:

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

Naja, vielen Dank, habe ich dank dir gelernt;) – Joff

Verwandte Themen