Query mit Join auf gleiche Tabelle
Bernhard12
- datenbank
0 Alexander, W.0 Ilja
Hi,
ich habe eine Tabelle mit 2 Spalten: created und type
type ist ein enum mit Werten 'a' und 'b'; created ein Timestamp.
Ich möchte jetzt ein Select, bei dem die Anzahl von 'a', die Anzahl von 'b', die Summe von 'a'+'b' und die Stunde geholt werden. Sortiert werden soll nach der Summe.
Bisher sieht es so aus:
SELECT COUNT(type) as actions, HOUR(created) as hour
FROM table
GROUP BY hour
ORDER BY actions DESC
Das gibt folgendes zurück:
actions||hour
-------||----
4 || 18
3 || 22
1 || 12
-------||----
wobei actions quasi die Summe aus 'a' und 'b' ist. Nun brauche ich noch zwei Spalten, so dass es wie folgt aus sieht:
actions||hour|| a || b
-------||----||---||---
4 || 18 || 3 || 1
3 || 22 || 0 || 3
1 || 12 || 1 || 0
-------||----||---||---
Dafür bräuchte ich eigentlich nur zwei Subselects à la:
SELECT COUNT(type) as a
FROM table
WHERE type='a' AND
HOUR(created)=hour
und
SELECT COUNT(type) as b
FROM table
WHERE type='b' AND
HOUR(created)=hour
Ich krieg aber dieses Subselect einfach nicht hin.
Bin für Hilfe sehr dankbar.
Gruß
Hallo Bernhard,
SELECT HOUR(created) AS hour,
(SELECT COUNT(type) FROM __test ta WHERE ta.type = 'a' AND HOUR(ta.created) = HOUR(t.created)) AS a,
(SELECT COUNT(type) FROM __test tb WHERE tb.type = 'b' AND HOUR(tb.created) = HOUR(t.created)) AS b
FROM __test t
GROUP BY HOUR(created)
ORDER BY HOUR(created) ASC
Die Tabelle heißt im Beispiel "__test".
Gruß Alexander.
Hallo Bernhard,
Ergänzung:
SELECT HOUR(`created`) AS hour,
(SELECT COUNT(type) FROM __test ta WHERE ta.type = 'a' AND HOUR(ta.`created`) = HOUR(t.`created`)) AS a,
(SELECT COUNT(type) FROM __test tb WHERE tb.type = 'b' AND HOUR(tb.`created`) = HOUR(t.`created`)) AS b,
(SELECT COUNT(*) FROM __test ts WHERE HOUR(ts.`created`) = HOUR(t.`created`)) AS actions
FROM __test t
GROUP BY HOUR(created)
ORDER BY HOUR(created) ASC
Vorausgesetzt type ist niemals NULL.
Die Tabelle heißt im Beispiel "__test".
Gruß Alexander.
Hammer!
Vielen Dank für die Hilfe :-)
moin,
Ich möchte jetzt ein Select, bei dem die Anzahl von 'a', die Anzahl von 'b', die Summe von 'a'+'b' und die Stunde geholt werden. Sortiert werden soll nach der Summe.
das was du hier schreibst ist anders also die lösung, die dir präsentiert wurde, zumal du meiner meinung nach auch keine subselects brauchst. und ich vermute, du benutzt msql, jedes andere dbms hätte dir sonst schon fehlermeldung um die ohren geworfen. aus deinen beschreibungen werde ich nicht ganz schlau, gib mal bitte beispieldaten an, welche daten in der tabelle sind und wie das ergebnis aussehen soll.
Ilja