Probleme mit count bei group by nach zwei Attributen

doerflia

Benutzer
Beiträge
7
Hi,

eigentlich total einfach, aber irgendwie komme ich nicht drauf.

Mein Datensatz sieht wie folgt aus (Tabellenspalten geändert, da Daten vertraulich):
id1|id2|id3
-------------
1|1|0
1|1|1
1|1|2
1|2|0
1|2|1
1|3|0
1|3|1
1|3|2
1|3|3
2|1|0
2|1|1
2|1|2
...

Ich versuche nach id1 und id2 einen Group-By Befehl zu setzen und die Anzahl der gemeinsamen Datensätze zu zählen und dafür eine neue Tabelle zu erzeugen.

Der Code:
CREATE TABLE Count AS
SELECT id1,
id2,
count(id2)
FROM table1
GROUP BY id1, id2

Ich erhalte die Tabelle Count mit:
id1|id2|count
-------------
1|1|7
1|2|5
1|3|27
2|1|7
....

Ok, es wird ja auch nur id2 gezählt...
Ein Count-Befehl count(id1, id2) gibt es nicht...

Aber was ich eigentlich möchte, ist eine Tabelle in Form:
id1|id2|count
----------------
1|1|3
1|2|2
1|3|4
2|1|3

Wie bekomme ich hin, dass die eindeutigen Kombinationen des Wertepaars id1, id2 und
nicht id2 gezählt wird?
Hat da jemand eine Idee?

Eigentlich kann das ja nicht so schwer sein, aber irgendwie habe ich da gerade einen Knoten im Kopf.


Vielen Dank & Liebe Grüße
Matthias
 
Werbung:
Code:
test=*# select * from doerflia ;
 id1 | id2 | id3
-----+-----+-----
   1 |   1 |   0
   1 |   1 |   1
   1 |   1 |   2
   1 |   2 |   0
   1 |   2 |   1
   1 |   3 |   0
   1 |   3 |   1
   1 |   3 |   2
   1 |   3 |   3
   2 |   1 |   0
   2 |   1 |   1
   2 |   1 |   2
(12 rows)

test=*# select id1, id2, count(1) from doerflia group by id1, id2 order by id1, id2;
 id1 | id2 | count
-----+-----+-------
   1 |   1 |     3
   1 |   2 |     2
   1 |   3 |     4
   2 |   1 |     3
(4 rows)

test=*#
 
Danke für die Schnelle Antwort.
Also leider macht dein Code auch nicht das was ich will...
Hast du den Code bei dir getestet? Oder einfach nur so gepostet?

Was soll denn count(1) machen???

Code:
Also ich erhalte so auch:
test = *#select id1, id2, count(1) from table1 group by id1, id2 order by id1, id2;
 id1 | id2 | count
-----+-----+-------
   1 |   1 |     7
   1 |   2 |     5
   1 |   3 |     27
   2 |   1 |     7
(4 rows)
 
ja, ich habe ihn getestet ;-)

Du kannst auch count(*) nehmen - es zählt die Vorkommen, gruppiert nach (id1,id2).

Code:
test=*# select id1, id2, count(*) from doerflia group by (id1, id2) order by id1, id2;
 id1 | id2 | count
-----+-----+-------
   1 |   1 |     3
   1 |   2 |     2
   1 |   3 |     4
   2 |   1 |     3
(4 rows)

test=*#
 
Gut, dann muss ich das Problem wohl falsch geschildert haben...
Weil ich bekomme ein anderes Ergebnis, wie das was ich erwartet habe...

Mein Code:
Code:
SELECT lanegroup_id,
       roadid,
       count(*)
FROM map.lane
GROUP BY roadid, lanegroup_id
ORDER BY roadid, lanegroup_id

Die Ausgabe:
upload_2019-7-10_11-19-21.png

Zähle ich nach, so muss Zeile 7 z. B. 2 Werte erhalten.

Über ein anderes Programm, mit dem ich arbeite, kann ich einen Filter setzen, um mir die Datensätze anzuzeigen:
upload_2019-7-10_11-21-37.png
Diese Ausgabe sieht dann wie folgt aus (also auch 2 Werte):
upload_2019-7-10_11-22-24.png
Der SQL-Befehl zählt aber 7 statt 2 Werte.

Eine Idee, was ich falsch mache?!
Also ehrlicherweise verstehe ich den Fehler nicht :D
Ich war mir ja auch sicher, dass das so funktionieren wird...
 

Anhänge

  • upload_2019-7-10_11-21-33.png
    upload_2019-7-10_11-21-33.png
    1,7 KB · Aufrufe: 1
Fehler gefunden, wenn auch nicht verstanden :D
Aber Code läuft jetzt.
Dir dennoch danke!

Hab hinter count distinct eingefügt... count(distinct roadid)
Dann hatte er überall eine 1 gezählt.
Die Sortierung und GroupBy so geändert wie ich das möchte (lanegoup_id, roadid)
Dann habe ich distinct wieder gelöscht...
Ging.

Wieso die Reihenfolge einen Unterschied macht, ist mir nicht klar.
Also wenn ich erst nach RoadId filtere und dann nach LanegroupID, dann macht das für mich von den Daten her keinen Unterschied, nur von der Darstellung her.
Aber: beim Zählen scheinbar schon. Irgendwie zählt dann mein PC "Mist".
Weder wurde die Anzahl aller gleichen "road"-IDs, noch aller gleichen "lanegroup"-IDs, noch aller gleichen Kombinationen gezählt...
 
Werbung:
Also wenn ich erst nach RoadId filtere und dann nach LanegroupID, dann macht das für mich von den Daten her keinen Unterschied, nur von der Darstellung her.
Aber: beim Zählen scheinbar schon. Irgendwie zählt dann mein PC "Mist".

Nicht verständlich, was Du wann wie gemacht hast und was bei rauskommt. Aber das Problem scheint ja gelöst zu sein ...
 
Zurück
Oben