![]() |
Datenbank: FB • Version: 2.0 • Zugriff über: egal
Anzahl der Gruppenmitglieder, mit Distinct
Hm,
blöder Titel, aber egal: Ich habe 2 Tabelle Gruppe: GruppeNr,GruppenBezeichnung Mitglied: Id, MitgliedNr, GruppenNr, Start, Ende In Mitglied kann mehrfach in einer Gruppe sein. Ich suche jetzt eine Liste aller Gruppen mit der Anzahl der Mitglieder, mehrfach vorhandene Mitglieder sollen aber nur einmal gezählt werden. Select Sum(), GruppenBezeichnung GroupBy liefert mir aber doppelte Mitglieder auch doppelt. Das will ich aber nicht. Was nun? Im Moment behelfe ich mich mit Select GruppenBezeichnung, Select Distinct Count(*), usw. Das erzeugt aber ein unschönes SubSelect |
AW: Anzahl der Gruppenmitglieder, mit Distinct
Mach 3 Tabellen:
Gruppe: GruppeNr,GruppenBezeichnung GruMi: GruppeNr,MitgliedNr Mitglied: Id, MitgliedNr, Start, Ende Falls sich Start und Ende auf die Gruppenmitgliedschaft bezieht, gehören die beiden in GruMi. Und es ist kein Fehler jeder Tabelle eine ID zu spendieren. Gruppe: ID,GruppeNr,GruppenBezeichnung GruMi: ID,GruppeID,MitgliedID Mitglied: Id, MitgliedNr, Start, Ende Gruß K-H |
AW: Anzahl der Gruppenmitglieder, mit Distinct
Vielleicht hilft dir
![]() |
AW: Anzahl der Gruppenmitglieder, mit Distinct
Versuch mal sowas:
Code:
select GruppenBezeichnung, count(*)
from Gruppe G join (select MitgliedNR, min(GruppenNR) as MinGruppenNR from Mitglied group by MitgliedNR) M on G.GruppenNr = M.MinGruppenNR group by GruppenBezeichnung |
AW: Anzahl der Gruppenmitglieder, mit Distinct
Sehe ich das richtig?
Du möchtest 1. von Mitglied: Id, MitgliedNr, GruppenNr, Start, Ende
SQL-Code:
select distinct MitgliedNr, GruppenNr from Mitglied
und 2. möchtest Du
SQL-Code:
select count(*) as Anzahl, GruppenNr, GruppenBezeichnung from Gruppe, group by GruppenNr, GruppenBezeichnung
Und das soll dann kombiniert werden.
SQL-Code:
Für
select Count(*) as Anzahl, g.GruppenNr, g.GruppenBezeichnung
from Gruppe g, (select distinct MitgliedNr, GruppenNr from Mitglied) m where g.GruppenNr = m.GruppenNr group by g.GruppenNr, g.GruppenBezeichnung
SQL-Code:
(select distinct MitgliedNr, GruppenNr from Mitglied) m
würd' ich mir 'ne View machen.
SQL-Code:
Dann wird obiges SQL etwas lesbarer:
create view v_Distinc_Mitglied_Gruppe as
select distinct MitgliedNr, GruppenNr from Mitglied
SQL-Code:
select Count(*) as Anzahl, g.GruppenNr, g.GruppenBezeichnung
from Gruppe g, v_Distinc_Mitglied_Gruppe m where g.GruppenNr = m.GruppenNr group by g.GruppenNr, g.GruppenBezeichnung |
AW: Anzahl der Gruppenmitglieder, mit Distinct
Moin zusammen,
das mit Hoika's Distinct finde ich zunächst schlicht gut, denn es trifft das Ergebnis bei kompaktem SQL-Ausdruck. Bei einer insgesamt komplexen SQL würde ich auch die Idee von Nahpets View verwenden, das sieht dann windschnittig nach übersichtlichem Join aus. Der Gedanke von p80286 das ordentlich zu Normalisieren wäre natürlich das Optimum, aber die böse Praxis 'planiert' einem die Tabellenstruktur oft. Mir würde jetzt noch eine Variante mit HAVING Count (Memembername) = 1 einfallen. Das geht, ist aber von der Eleganz des Distinct doch geblendet. Die Oracle Freaks könnten auch noch mit SELECT ROW_NUMBER() OVER(PARTITION by Membername auffahren und dann immer die Row_Number=1, erster Satz der Gruppe, nehmen, dass hilft dann beim Abschrecken neuer Kollegen. Also Hoika: - ist schon gut so - :wink: Grüße in die Runde // Martin |
AW: Anzahl der Gruppenmitglieder, mit Distinct
Hallo,
keine Meckerei wegen DB-Design hier, war doch nur ein Beispiel. So wie vorgeschlagen (Select x, Select())) habe ich es ja. Aber das erzeugt einen SubSelect, den wollte ich vermeiden. Da FB keine materialized Views kennt, bringt der View (außer Lesebarkeit) leider auch nichts. Egal, bleibt so, ich habe wichtigere Sachen zu tun. Schöne Pfingsten an alle hier. Zitat:
|
AW: Anzahl der Gruppenmitglieder, mit Distinct
Und was ist mit
Code:
aus meinem Link oben?
select count(distinct Feldname) from ...
|
AW: Anzahl der Gruppenmitglieder, mit Distinct
Hallo,
den Link habe ich nicht verstanden, genauer wie das mir was bringen soll, ein Subselect zu vermeiden. |
AW: Anzahl der Gruppenmitglieder, mit Distinct
Zitat:
Code:
das gewünschte Ergebnis (doppelte Einträge werden nicht gezählt)?!
select count(distinct Feldname) from ...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz