Dies ist im Grunde ist eine Pivot-Tabelle.
Eine nette Anleitung, wie Sie dies erreichen können, finden Sie hier:http:// www.artfulsoftware.com/infotree/qrytip.php?id=78
Ich empfehle, diesen Beitrag zu lesen und diese Lösung an Ihre Bedürfnisse anzupassen.
Aktualisieren
Nachdem der obige Link derzeit nicht mehr verfügbar ist, fühle ich mich verpflichtet, einige zusätzliche Informationen für alle bereitzustellen, die hier nach mysql-Pivot-Antworten suchen. Es hatte wirklich eine riesige Menge an Informationen, und ich werde nicht alles von dort hineinstecken (umso mehr, als ich ihr riesiges Wissen einfach nicht kopieren möchte), aber ich werde einige Ratschläge geben, wie man mit Pivot umgeht Tabellen im Allgemeinen auf SQL-Weise mit dem Beispiel von Peku, der die Frage überhaupt gestellt hat.
Vielleicht kommt der Link bald wieder, ich werde danach Ausschau halten.
Die Art der Tabellenkalkulation...
Viele Leute verwenden zu diesem Zweck einfach ein Tool wie MSExcel, OpenOffice oder andere Tabellenkalkulationstools. Dies ist eine gültige Lösung, kopieren Sie einfach die Daten dorthin und verwenden Sie die Tools, die die GUI bietet, um dies zu lösen.
Aber ... das war nicht die Frage, und es könnte sogar zu einigen Nachteilen führen, wie z. B. wie man die Daten in die Tabelle bekommt, problematische Skalierung und so weiter.
Der SQL-Weg...
Angesichts dessen sieht seine Tabelle etwa so aus:
CREATE TABLE `test_pivot` (
`pid` bigint(20) NOT NULL AUTO_INCREMENT,
`company_name` varchar(32) DEFAULT NULL,
`action` varchar(16) DEFAULT NULL,
`pagecount` bigint(20) DEFAULT NULL,
PRIMARY KEY (`pid`)
) ENGINE=MyISAM;
Schauen Sie nun in seine/ihre gewünschte Tabelle:
company_name EMAIL PRINT 1 pages PRINT 2 pages PRINT 3 pages
-------------------------------------------------------------
CompanyA 0 0 1 3
CompanyB 1 1 2 0
Die Zeilen (EMAIL
, PRINT x pages
) Bedingungen ähneln. Die Hauptgruppierung erfolgt nach company_name
.
Um die Bedingungen einzurichten, schreit dies eher nach der Verwendung des CASE
-Erklärung. Um nach etwas zu gruppieren, verwenden Sie ... GROUP BY
.
Das grundlegende SQL, das diesen Pivot bereitstellt, kann etwa so aussehen:
SELECT P.`company_name`,
COUNT(
CASE
WHEN P.`action`='EMAIL'
THEN 1
ELSE NULL
END
) AS 'EMAIL',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '1'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 1 pages',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '2'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 2 pages',
COUNT(
CASE
WHEN P.`action`='PRINT' AND P.`pagecount` = '3'
THEN P.`pagecount`
ELSE NULL
END
) AS 'PRINT 3 pages'
FROM test_pivot P
GROUP BY P.`company_name`;
Dies sollte sehr schnell das gewünschte Ergebnis liefern. Der Hauptnachteil dieses Ansatzes ist, je mehr Zeilen Sie in Ihrer Pivot-Tabelle haben möchten, desto mehr Bedingungen müssen Sie in Ihrer SQL-Anweisung definieren.
Auch damit kann man umgehen, daher neigen die Leute dazu, vorbereitete Anweisungen, Routinen, Zähler und dergleichen zu verwenden.
Einige weiterführende Links zu diesem Thema:
- http://anothermysqldba.blogspot. de/2013/06/pivot-tables-example-in-mysql.html
- http://www.codeproject. com/Articles/363339/Cross-Tabulation-Pivot-Tables-with-MySQL
- http://datacharmer.org/downloads/pivot_tables_mysql_5.pdf
- https://codingsight.com/pivot-tables-in-mysql/