Anzahl einer Zahl gruppiert anzeigen lassen - möglich?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Hi,

ich möchte zählen wie oft willkürliche Nummern in einer Spalte vorkommen. Die Nummern sind immer eindeutig

Beispiel: Spalte ist transponiert dargstellt


[2, 2, 2, 2, 66 66, 9, 5 ,5 ,5 ,5 ,3 ,100 ,102]^T


Was ich als Ergebnis haben möchte:

4x kam eine Zahl einfach vor
1x kam eine Zahl zweifach vor
0x kam eine Zahl dreifach vor
2x kam eine Zahl vierfach vor

sprich als Output dann eine Tabelle:

1 I 4
--------
2 I 1
--------
3 I 0
---------
4 I 2

Geht das in SQL?
Also in pandas würde das problemlos gehen, aber würde ungern den Schritt extra machen auf Dauer.
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Das kannst du via COUNT und GROUP BY in SQL machen.
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Danke, ich versuche das mal.
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Ungetestet:

Code: Alles auswählen

SELECT counting, COUNT(counting) FROM (SELECT COUNT(feldname) AS counting FROM tabelle GROUP BY feldname) GROUP BY counting;
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

klingt logisch... sollte mir auf jeden Fall die subqueries anschauen. Vergesse immer, dass es die gibt. Probiere das mal aus
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

sparrow hat geschrieben: Montag 22. Juni 2020, 21:04 Ungetestet:

Code: Alles auswählen

SELECT counting, COUNT(counting) FROM (SELECT COUNT(feldname) AS counting FROM tabelle GROUP BY feldname) GROUP BY counting;
Das funktioniert soweit, nur, dass man die selected Tabelle noch einen Alias geben muss.

Was mir jetzt aber aufgefallen ist, ist, dass ich in einigen Fällen den Count mal zwei rechnen muss. Also wie hier im Beispiel:


13 I 1
--------
13 I 2
--------
13 I 1
---------
44 I 2
--------
77 I 1
--------
77 I 1
---------
77 I 2
---------
77 I 2


Was zu dem Ergebnis führen soll:

Einmal kommt eine Zahl zweimal vor (44*2)
Zweimal kommt eine Zahl nullmal vor
Dreimal kommt eine Zahl viermal vor ( 13*1 , 13*2, 13*1)
Viermal kommt eine Zahl sechsmal vor ( 1+1+2+2)
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Das verstehe ich nicht.
Wie bist du denn von der Vorgabe über meine Query zu dem Ergebnis gekommen? Das kann ja nicht sein.
Du musst schon zeigen, was gegeben ist und was du erwartest. Aus der Erklärung, warum hier irgendwas "mal zwei" gerechnet werde soll, werde ich nicht schlau.
Antworten