2017-09-01 2 views
2

ich zwei Fragen haben zur Folge:durch Abfragen Kombinieren Sie zwei Bestellung erhalten

SELECT COUNT(*) as adet, MONTHNAME(date_created) as monthname 
FROM orders 
WHERE YEAR(date_created) = 2017 
GROUP BY MONTH(date_created) 

die

adet monthname 
---------------- 
17 January 
24 February 
45 March 
40 April 

und eine weitere Abfrage dieses Ergebnis zurückgibt:

SELECT COUNT(*) as adet, seller_id 
FROM orders 
WHERE YEAR(date_created) = 2017 
GROUP BY seller_id 

, die dieses Ergebnis zurückgibt:

adet seller_id 
--------------- 
120 20 
120 21 
500 22 
400 23 

Wie kann ich kombinieren diese beiden Abfragen das Ergebnis wie folgt zu erhalten:

adet month seller_id 
-------------------- 
-09- -Jan- --20-- 
-05- -Fab- --20-- 
-05- -Mar- --20-- 
... 
-05- -jan- --21-- 
-04- -Fab- --21-- 
... 
-05- -jan- --22-- 
-04- -Fab- --22-- 

Antwort

3

Sie

SELECT COUNT(*) adet, LAST_DAY(date_created) month_ending, seller_id 
    FROM orders 
    WHERE date_created >= DATE_FORMAT(CURDATE(),'%Y-01-01') 
    AND date_created < DATE_FORMAT(CURDATE(),'%Y-01-01') + INTERVAL 1 YEAR 
    GROUP BY LAST_DAY(date_created), seller_id 

versuchen können, warum Sie etwas verwenden würden, so scheinbar komplex? Denn

  1. wird es nächstes Jahr arbeiten.
  2. es wird Bereiche von Daten, die nicht auf Jahresgrenzen
  3. Ende gehen wird es in der Lage sein, einen Index auf Ihre date_created Spalte und damit schneller ausgeführt werden.
1

Versuchen unter Abfrage:

SELECT COUNT(*) as adet, MONTHNAME(date_created) as monthname,seller_id 
FROM orders where YEAR(date_created) = 2017 
GROUP BY MONTH(date_created),seller_id 
+0

diese Antwort ist auch richtig, danke –