2016-10-14 22 views
2

在MySQLPostgreSQL的查詢,讓每個月算,一年內

SELECT y, m, Count(users.created_date) 
    FROM (
     SELECT y, m 
     FROM 
     (SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years, 
     (SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 
      UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 
      UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym 
     LEFT JOIN users 
     ON ym.y = YEAR(FROM_UNIXTIME(users.created_date)) 
      AND ym.m = MONTH(FROM_UNIXTIME(users.created_date)) 
    WHERE 
     (y=YEAR(CURDATE()) AND m<=MONTH(CURDATE())) 
     OR 
     (y<YEAR(CURDATE()) AND m>MONTH(CURDATE())) 
    GROUP BY y, m; 

Mysql的輸出

+------+----+----------------------+ 
| y | m | Count(users.created) | 
+------+----+----------------------+ 
| 2012 | 5 |     5595 | 
| 2012 | 6 |     4431 | 
| 2012 | 7 |     3299 | 
| 2012 | 8 |     429 | 
| 2012 | 9 |     0 | 
| 2012 | 10 |     3698 | 
| 2012 | 11 |     6208 | 
| 2012 | 12 |     5142 | 
| 2013 | 1 |     1196 | 
| 2013 | 2 |     10 | 
| 2013 | 3 |     0 | 
| 2013 | 4 |     0 | 
+------+----+----------------------+ 

**在PostgreSQL QUERY **

SELECT to_char(created_date, 'MM'), 
     count(id) 
FROM users 
WHERE created_date > 
     date_trunc('month', CURRENT_DATE) - INTERVAL '1 year' 
GROUP BY 1 

POSTGRESQL OUTPUT postgresql output

我可以知道如何像mysql輸出一樣獲取postgresql輸出。需要在一年內得到當前數據的結果。

+1

好了,數據本身似乎有所不同,但除此之外,問題究竟是什麼? – Mureinik

+0

你的MySQL查詢沒有產生你指定的輸出。它不可能輸出一個數爲0的行。 –

+0

@GordonLinoff sry gordon。現在我更改mysql查詢。 – boopathi008

回答

2

我假設你正在尋找的是其中數爲0的行如果是這樣,你可以使用generate_series的情況下和左連接上你的表數據:

SELECT to_char(i, 'YY'), to_char(i, 'MM'), 
     count(id) 
    FROM generate_series(now() - INTERVAL '1 year', now(), '1 month') as i 
    left join users on (to_char(i, 'YY') = to_char(created_date, 'YY') 
         and to_char(i, 'MM') = to_char(created_date, 'MM') and login_type = 1) 
    GROUP BY 1,2; 
+0

是的,應該是「由1,2組」而不是「由1組」謝謝奧拉夫,固定答案 –

+0

感謝您的回答..其工作正常..您節省我的時間。 :) – boopathi008

+0

當我使用條件它不工作。例如我添加了'where login_type = 1'。那個時候它的節目只計數大於0的數字 – boopathi008

相關問題