1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Zahlen vergleichen und Menge zählen

Dieses Thema im Forum "MySQL" wurde erstellt von MichaelB, 11 Januar 2012.

  1. MichaelB

    MichaelB Neuer Benutzer

    Hallo Forumsmitglieder,

    ich hätte mal eine Frage.

    Ich benötige eine Datenbankabfrage in SQL / MySql. Da ich noch ein „blutiger“ Anfänger bin, komme ich leider nicht weiter.

    Was habe ich:

    Eine Tabelle mit folgenden Eigenschaften:

    ID / Datum / Tag / Zahl_1 / Zahl_2 / Zahl_3

    0 / 20120107 / Samstag / 2 / 9 / 20
    1 / 20120111 / Mittwoch / 9 / 12 / 35

    Was möchte ich:

    Ausgabe:

    2 - 1x
    9 - 2x
    20 - 1x
    35 - 1x

    Kurz gesagt, die Zahlen zählen und die Menge ausgeben.
    Geht dies in einer Tabelle, oder muss ich mehrere Tabellen dafür anlegen?

    Vorab vielen Dank!

    Gruß
    Michael
     
  2. ukulele

    ukulele Datenbank-Guru

    Das geht auf jedenfall in einer Abfrage. Aber ich versteh grad nicht ganz, wie gezählt werden soll, ich versuchs mal, weiss aber nicht ob das Sinn ergibt.
    Code:
    SELECT    ID,
            Datum,
            Tag,
            (    CASE    Zahl_1
                WHEN    2    THEN    2*1
                WHEN    9    THEN    9*2
                WHEN    20    THEN    20*1
                WHEN    35    THEN    35*1
                ELSE    0
                END ) +
            (    CASE    Zahl_2
                WHEN    2    THEN    2*1
                WHEN    9    THEN    9*2
                WHEN    20    THEN    20*1
                WHEN    35    THEN    35*1
                ELSE    0
                END ) +
            (    CASE    Zahl_3
                WHEN    2    THEN    2*1
                WHEN    9    THEN    9*2
                WHEN    20    THEN    20*1
                WHEN    35    THEN    35*1
                ELSE    0
                END ) AS Summe
    FROM    tabelle
    Natürlich kann man das eleganter formulieren wenn z.B. mehr Zahlen betroffen sind, hier mal ein Ansatz (ob das Sinn ergibt kann ich nicht beurteilen):
    Code:
    SELECT    ID,
            Datum,
            Tag,
            (    CASE
                WHEN    Zahl_1 IN (2,20,35)    THEN    Zahl_1*1
                WHEN    Zahl_1 IN (9)        THEN    Zahl_1*2
                ELSE    0
                END ) +
            (    CASE
                WHEN    Zahl_2 IN (2,20,35)    THEN    Zahl_2*1
                WHEN    Zahl_2 IN (9)        THEN    Zahl_2*2
                ELSE    0
                END ) +
            (    CASE
                WHEN    Zahl_3 IN (2,20,35)    THEN    Zahl_3*1
                WHEN    Zahl_3 IN (9)        THEN    Zahl_3*2
                ELSE    0
                END ) AS Summe
    FROM    tabelle
     
  3. MichaelB

    MichaelB Neuer Benutzer

    Hallo ukulele,

    danke für die Antwort und das Script.
    Aber leider ist es nicht das, was ich erhoft habe.
    Es sollen die Zahlen verglichen und gezählt werden (wie oft kommen die Zahlen vor).
    Die Datenbank ist nur ein Beispiel. Es sollen später noch viele weitere Zahlen hinzukommen.

    Gruß
    Michael
     
  4. ukulele

    ukulele Datenbank-Guru

    Wie oft die Zahl vorkommt verstehe ich, aber vergleichen? Bevor ich jetzt nochmal was zusammen tippe bitte einmal eine eindeutige Prozessbeschreibung. So wie ich das sehe hast du 3 Spalten mit beliebigen Zahlen die alle, unabhängig ihrer Reihenfolge (ob Zahl 1 2 oder 3) "gezählt" ((i.S.v. wie oft kommt die Zahl vor) werden sollen. Ist in dem Zusammenhang das Datum und/oder der Tag ein Unterscheidungskriterium oder wird alles zusammen gezählt?
     
  5. Charly

    Charly Datenbank-Guru

    Hallo MichaelB,

    hoffe der Ansatz bringt Dich weiter:

    Code:
    select Zahl, count(ID) as counter from (
    select Zahl_1 as Zahl, ID from T1 as A
    union
    select Zahl_2 as Zahl, ID from T1 as B
    union
    select Zahl_3 as Zahl, ID from T1 as C
    ) as T2
    group by Zahl
    order by Zahl
    
    Gruß charly
     
    Walter, MichaelB und ukulele gefällt das.
  6. ukulele

    ukulele Datenbank-Guru

    Das wäre auch mein Ansatz wenn Datum und Wochentag nicht relevant sind.
     
  7. MichaelB

    MichaelB Neuer Benutzer

    Hallo Charly,

    dank dir!
    Ich werde es heute Abend testen.
    Datum und Wochentag sind momentan noch nicht (später schon) relevant.
    Ich melde mich wieder.

    Gruß
    Michael
     
  8. MichaelB

    MichaelB Neuer Benutzer

    Hallo Charly,

    Problem gelöst!
    Funktioniert perfekt.

    Vielen Dank!

    Gruß
    Michael
     

    Anhänge:

    • 1.jpg
      1.jpg
      Dateigröße:
      22,7 KB
      Aufrufe:
      4
    Walter gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen