1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Zwei Selects in einer Abfrage

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von toto1975, 14 Juli 2018.

  1. toto1975

    toto1975 Benutzer

    Hallo in die Runde,

    ich habe eine Tabelle mit folgenden Spalten

    Time | Value

    Jetzt möchte ich eine Abfrage erstellen die mir folgendes liefert: für jeden Monat die Anzahl der Werte die den Wert 25 und 30 übersteigen. Also als Beispiel so

    Monat |Anzahl Wert > 25 | Anzahl Wert > 30
    06:2018 | 5 | 10
    07.2018 | 8 | 7

    Mein bisheriger Ansatz sieht so aus.

    Code:
    SELECT COUNT(A.Tag) AS anzahl, DATE_FORMAT(A.Tag, '%m.%Y') as Monat, COUNT(Tage) AS Anzahl2
    FROM (SELECT DISTINCT DATE(Time) as Tag FROM Item1
         WHERE Value >=30) AS A,
         (SELECT DISTINCT DATE(Time) as Tage FROM Item1
         WHERE Value >=25) AS B
    Group by DATE_FORMAT(A.Tag, '%m.%Y')
    Allerdings bekomme ich da viel zu Hoch Werte angezeigt. HAt hier jemand einen Tipp für mich?

    Vielen Dank und Gruß
    Torsten
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=# create table toto1975(ts timestamp, value int);
    CREATE TABLE
    test=*# insert into toto1975 select '2018-01-01'::timestamp + '1day'::interval * random() * 500, random() * 100 from generate_Series(1,20) s;
    INSERT 0 20
    test=*# select * from toto1975 ;
                ts            | value
    --------------------------+-------
     2019-04-15 20:28:27.55   |    88
     2019-03-06 13:52:01.2345 |    14
     2018-03-28 07:37:34.0765 |    34
     2018-11-02 19:09:44.1705 |    25
     2018-05-21 18:50:03.506  |    45
     2018-03-21 00:07:24.6085 |    26
     2018-09-18 14:48:46.0845 |    28
     2018-12-18 01:09:28.9595 |    18
     2018-01-29 23:16:15.4    |    32
     2018-07-07 11:07:37.088  |    73
     2018-01-16 18:20:28.6415 |    32
     2018-03-17 14:21:39.1725 |    55
     2019-04-29 01:45:39.0125 |    23
     2018-01-16 19:40:41.007  |    42
     2018-02-08 02:15:04.8795 |    15
     2018-07-21 07:07:16.4835 |     2
     2018-01-14 18:53:16.858  |    26
     2018-03-19 15:50:55.619  |    20
     2018-10-29 01:12:19.9465 |    77
     2018-08-12 19:57:33.764  |    88
    (20 Zeilen)
    
    test=*# select extract(month from ts), count(*) filter (where value > 25) as anzahl_25, count(*) filter (where value > 30) as anzahl_30 from toto1975 group by extract(month from ts) order by extract(month from ts);
     date_part | anzahl_25 | anzahl_30
    -----------+-----------+-----------
             1 |         4 |         3
             2 |         0 |         0
             3 |         3 |         2
             4 |         1 |         1
             5 |         1 |         1
             7 |         1 |         1
             8 |         1 |         1
             9 |         1 |         0
            10 |         1 |         1
            11 |         0 |         0
            12 |         0 |         0
    (11 Zeilen)
    
    PostgreSQL, Portierung nach MySQL überlasse ich Dir zur Übung.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden