Sabine: MYSQL - Statistik erstellen mit count, group

Ich habe eine Tabelle in der zwei Spalten Sind

INTERN ! PAGE
-------------------
0   !  seite
0   !  berg
12 ! index
0   ! index
14 ! index
0   ! seite

über diese möchte ich eine Statisik erstellen, das mache ich so

select page, count(page)AS anzahl from tabelle GROUP BY page ORDER BY anzahl  
DESC

das sieht dann so aus:

PAGE  ANZAHL
index 3
berg 1
seite 2

doch ich möchte nun auch die Splate INTERN einbinden, dort sind nur Einträge
wenn in der Spalte PAGE index steht!

Die Ausgabe sollte dann so sein

PAGE  ANZAHL
index       1
berg         1
12            1
14            1
seite         2

Aber leider finde ich keinen Ansatz für eine Lösung. Vieleicht hat hier jemand einen Tipp für mich?

Sabine

  1. Hi,

    Vieleicht hat hier jemand einen Tipp für mich?

    Tipp: Formuliere bitte künftig deine Aufgabenstellung so, dass sie eindeutig ist und keinen Ratespielraum lässt, welche Daten du wie ermittelt haben möchtest.
    Also bitte nicht nur Beispieldaten hinwerfen und „so möchte ich das“ - sondern vor allem auch verbal(!) erklären(!), was da wie ermittelt werden soll.
    Danke.

    doch ich möchte nun auch die Splate INTERN einbinden, dort sind nur Einträge wenn in der Spalte PAGE index steht!

    Die Ausgabe sollte dann so sein

    PAGE  ANZAHL
    index       1
    berg         1
    12            1
    14            1
    seite         2

    Also willst du den Inhalt der Spalte page und die Anzahl, nach page gruppiert, für alle Einträge, bei denen entweder page nicht gleich 'index' ist, oder gleich 'index' und dabei dann aber intern gleich 0,
    und außerdem den Inhalt der Spalte index nebst Anzahl, nach intern gruppiert, von den „restlichen“ ...

    ... ja? (Wie gesagt, das muss ich aus deinen Beispieldaten vermuten/erraten.)

    Dann bietet es sich an, diese zwei Selektionen einzeln zu machen und per UNION zu verbinden:

    ( SELECT page, count(page) anzahl  
      FROM tabelle  
      WHERE page != 'index' OR (page = 'index' AND intern = 0)  
      GROUP BY page )  
    UNION  
    ( SELECT intern, count(intern)  
      FROM tabelle  
      WHERE page = 'index' AND intern != 0  
      GROUP BY intern )
    

    Weitere Details zu UNION, wie dass die Vergabe der Aliase vom ersten SELECT abhängt, wie man ggf. sortiert etc., entnehme bitte dem Handbuch.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?