Announcement

Collapse
No announcement yet.

Count und Group by auf zwei Tabellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Count und Group by auf zwei Tabellen

    Hi,
    ich nehme an, die Frage lässt sich (fast) jeder DB zuordnen. Daher hier der Eintrag.

    Ich habe 3 Tabellen:

    Los (id, name)
    Verteiler (id, los_id, name)
    Hausanschluss (id, los_id, name)


    Ich möchte wissen, wie viele Verteiler und Hausanschlüsse in einem Los sind.

    Die Hausanschlüsse und Verteiler getrennt zu erfassen ist kein Problem, wie aber wenn ich beide Summen haben möchte? Hier der Code, wie ich die Anzahl der Verteilersumme pro Los erhalte.

    Code:
    SELECT
    	verteiler.los_id AS "LOS",
    	count (los.id) AS "Anzahl Verteiler"
      
    FROM   	
    	los, 
        verteiler
        
    WHERE 
    	los.id = verteiler.los_id
    
    GROUP BY
    	verteiler.los_id

    Das ganze soll natürlich zügig laufen können. Ist es sinnvoll, hier einen Trigger zu verwenden, der die Summe der Verteiler/Hausanschlüsse in die Tabelle Los schreibt? (Eine andere Frage, ich weiß)

    Gruß karl
    Zuletzt editiert von karl_ha; 08.03.2009, 22:19.

  • #2
    Hallo karl_ha,
    Originally posted by karl_ha View Post
    ...Ich habe 3 Tabellen:

    Los (id, name)
    Verteiler (id, los_id, name)
    Hausanschluss (id, los_id, name)


    Ich möchte wissen, wie viele Verteiler und Hausanschlüsse in einem Los sind.

    Die Hausanschlüsse und Verteiler getrennt zu erfassen ist kein Problem, wie aber wenn ich beide Summen haben möchte?
    Ja was nun - Anzahl oder Summen? Für das Prinzip der Abfrage spielt es zwar keine Rolle und ich bin mir ziemlich sicher das die Anzahl gemeint ist, aber solche unkorrekte Terminologie kann schnell zu Verwirrungen führen!

    Eigentlich mußt du doch dein angegebenes Statement nur um die Hausanschluß-Tabelle erweitern.
    [highlight=sql]
    SELECT los.id AS "LOS",
    count(distinct vt.id) AS "Anzahl Verteiler",
    count(distinct ha.id) AS "Anzahl HA"
    FROM los
    left join verteiler vt on vt.los_id = los.id
    left join Hausanschluss ha on ha.los_id = los.id
    GROUP BY los.id
    [/highlight]
    Das count(distinct... ist dafür, damit jeder Verteiler, bzw. HA nur einmal gezählt wird und die LEFT JOIN berücksichtigen auch lose, die gar keinen HA bzw. Verteiler haben.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Bei einem mehrmaligem Aufruf von count(DISTINCT...) wird die Anfrage recht träge. Gibt es eine Möglichkeit das besser zu formulieren?
      Zuletzt editiert von karl_ha; 11.03.2009, 12:10.

      Comment

      Working...
      X