AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Anzahl der Gruppenmitglieder, mit Distinct
Thema durchsuchen
Ansicht
Themen-Optionen

Anzahl der Gruppenmitglieder, mit Distinct

Ein Thema von hoika · begonnen am 1. Jun 2017 · letzter Beitrag vom 3. Jun 2017
Antwort Antwort
Seite 1 von 2  1 2      
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#1

Anzahl der Gruppenmitglieder, mit Distinct

  Alt 1. Jun 2017, 21:17
Datenbank: FB • Version: 2.0 • Zugriff über: egal
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
Heiko

Geändert von hoika ( 1. Jun 2017 um 22:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Anzahl der Gruppenmitglieder, mit Distinct

  Alt 2. Jun 2017, 08:04
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#3

AW: Anzahl der Gruppenmitglieder, mit Distinct

  Alt 2. Jun 2017, 08:20
Vielleicht hilft dir das hier weiter?!
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Anzahl der Gruppenmitglieder, mit Distinct

  Alt 2. Jun 2017, 09:13
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
Gruß, Jo
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: Anzahl der Gruppenmitglieder, mit Distinct

  Alt 2. Jun 2017, 11:07
Sehe ich das richtig?

Du möchtest 1.

von Mitglied: Id, MitgliedNr, GruppenNr, Start, Ende
select distinct MitgliedNr, GruppenNr from Mitglied

und 2. möchtest Du

select count(*) as Anzahl, GruppenNr, GruppenBezeichnung from Gruppe, group by GruppenNr, GruppenBezeichnung

Und das soll dann kombiniert werden.
SQL-Code:
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
Für
(select distinct MitgliedNr, GruppenNr from Mitglied) m
würd' ich mir 'ne View machen.
SQL-Code:
create view v_Distinc_Mitglied_Gruppe as
select distinct MitgliedNr, GruppenNr from Mitglied
Dann wird obiges SQL etwas lesbarer:
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
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#6

AW: Anzahl der Gruppenmitglieder, mit Distinct

  Alt 2. Jun 2017, 13:25
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 -


Grüße in die Runde // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Anzahl der Gruppenmitglieder, mit Distinct

  Alt 2. Jun 2017, 14:54
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:
Mir würde jetzt noch eine Variante mit HAVING Count (Memembername) = 1 einfallen
Das würde mir doch die Mitglieder, die mehrfach in der Gruppe sind, dann doch gar nicht mehr anzeigen, oder?
Heiko

Geändert von hoika ( 2. Jun 2017 um 15:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#8

AW: Anzahl der Gruppenmitglieder, mit Distinct

  Alt 2. Jun 2017, 15:07
Und was ist mit
Code:
select count(distinct Feldname) from ...
aus meinem Link oben?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Anzahl der Gruppenmitglieder, mit Distinct

  Alt 2. Jun 2017, 16:55
Hallo,
den Link habe ich nicht verstanden,
genauer wie das mir was bringen soll, ein Subselect zu vermeiden.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#10

AW: Anzahl der Gruppenmitglieder, mit Distinct

  Alt 2. Jun 2017, 17:01
Hallo,
den Link habe ich nicht verstanden,
genauer wie das mir was bringen soll, ein Subselect zu vermeiden.
Wenn ich dich richtig verstanden habe, dann bringt doch das
Code:
select count(distinct Feldname) from ...
das gewünschte Ergebnis (doppelte Einträge werden nicht gezählt)?!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz