Zwei Selects in einer Abfrage

toto1975

Benutzer
Beiträge
9
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
 
Werbung:
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.
 
Zurück
Oben