Count funktioniert bei mir nicht!

arazmeh

Neuer Benutzer
Beiträge
3
Hallo Zusammen,

ich möchte in meiner Abfrage aus der Spalte "original_ctr_id" alle Duplikate angezeigt kriegen. Das funktioniert aber nicht wie erwartet.
Folgende Abfrage verwende ich dafür:

Select
original_ctr_id,
ctr_id,
Count (original_ctr_id) As Anzahl
from t_ctr_contract
GROUP BY
original_ctr_id,
ctr_id
Order BY ctr_id DESC

Ergebnis:
1672739270360.png

Die Anzahl der markierten Zeilen hätten doch 2 sein müssen?

Danke für eure Antworten.

LG
AZ
 
Werbung:
Die Anzahl wird durch die Häufigkeit der eindeutig gruppierbaren Werte definiert. Die ist im markierten Bereich jeweils 1 für die angezeigte Kombination.
 
Hi dabadepdu, danke für die Rückmeldung. :)

"Anzahl wird durch die Häufigkeit der eindeutig gruppierbaren Werte definiert"
Aber eben weil 898 2x auftauchen hätte doch die Anzahl 2 sein müssen oder nicht?

Gibt es keine Möglichkeit das zu umgehen, weil ich benötige beide Spalten für die Auswertung?
Was ich auch probiert habe war auch:

SELECT
COUNT(original_ctr_id) As Anzahl,
original_ctr_id,
ctr_id
FROM t_ctr_contract
GROUP BY
original_ctr_id,
ctr_id
HAVING COUNT(original_ctr_id)>1

Ergebins -> 0 Zeilen

Select
Count (*) As Anzahl,
original_ctr_id,
ctr_id
from t_ctr_contract
GROUP BY
original_ctr_id,
ctr_id
HAVING
COUNT(*) > 1
ORDER BY
COUNT(*) DESC;

Ergebnis > 0 Zeilen
 
Du "darfst" nicht nach der ID gruppieren, wenn du möchtest dass die 2 Datensätze zusammengezählt werden.

schnell eine Tabelle und Abfrage aufgebaut:
Code:
create table bla(id integer);
insert into bla values (1);
insert into bla values (1);
insert into bla values (2);
select id, count(id) from bla group by id;

Ergebnis:
ID, Count
21
12

weil 2 einmal vorkommt, und 1 zweimal.

EDIT:
Nach dem group by sollten nur spalten vorkommen, welche auch doppelt vorkommen, wenn die ID aber einmalig ist, ... kann diese auch nicht doppelt vorkommen.
 
Aber eben weil 898 2x auftauchen hätte doch die Anzahl 2 sein müssen oder nicht?
Ja und nein, ein Wert, der mehrfach auftaucht, wird auch richtig gezählt:
Code:
select orig_ctr_id, count(ctr_id) from demonstration
  group by orig_ctr_id;
===================
orig_ctr_id | count
898 | 2

Aber die Zahl gibt nur an, wieviel Einträge innerhalb der vorgegebenen(!>group by) Gruppe auftreten.
Dein Statement definiert die Gruppe über die Spalten orig_ctr_id und ctr_id, also 2 Spalten. Werden innerhalb dieser Spalten die Vorkommen gezählt, so ist es jeweils nur 1x der Wert 898.

Dein Select Statement spürt nicht, dass Du davor sitzt und die gleiche Zahl 2x siehst.
 
Werbung:
Gezählt werden immer nur alle Datensätze, die auch gruppiert wurden. Alle Funktionen arbeiten so, werden die Datensätze in einer anderen Zeile ausgegeben, zählen sie zum Ergebnis der Funktion in der jeweiligen Zeile.

Du kannst das Ergebnis mit den eigentlichen Daten kombinieren um deinen gewünschten Effekt zu erzielen:
Code:
Select
t_ctr_contract.original_ctr_id,
ctr_id,
t.Anzahl
from t_ctr_contract
LEFT JOIN (
Select
original_ctr_id,
Count (*) As Anzahl
from t_ctr_contract
GROUP BY
original_ctr_id
) t
ON t_ctr_contract.original_ctr_id = t.original_ctr_id
Order BY ctr_id DESC
 
Zurück
Oben