2014-02-10 95 views
1

我有一個工作的MySQL查詢,但我不能讓它與postgres一起工作。這是查詢(我已經改變日期格式TO_CHAR轉換mysql到postgresql

SELECT country as grouper, date(users.created_at) as date, 
     to_char(users.created_at, '%Y-%m') as date_group, 
     count(id) as total_count 
    FROM "users" 
WHERE (users.created_at >= '2011-12-01') 
    AND (users.created_at <= '2014-02-11') 
GROUP BY grouper, date_group 
ORDER BY date ASC 

我得到的錯誤:

PG::Error: ERROR: column "users.created_at" must appear in the GROUP BY clause or be used in an aggregate function 
LINE 1: SELECT country as grouper, date(users.created_at) as date, t... 

感謝您的幫助

回答

2
SELECT country as grouper, date(MIN(users.created_at)) as date, 
     to_char(MIN(users.created_at), '%Y-%m') as date_group, 
     count(id) as total_count 
    FROM "users" 
HAVING (users.created_at >= '2011-12-01') 
    AND (users.created_at <= '2014-02-11') 
GROUP BY grouper, date_group 
ORDER BY date ASC 

MySQL不是很嚴格。在符合標準的SQL中,所有列值必須在非分組字段上使用聚合函數(SUM,COUNT,MAX,MIN) - 使用GROUP BY時。

老實說,我不完全確定GROUP BY中的data_group;它可以被丟棄嗎? 另外請注意,我已經與HAVING切換。

1

你應該在集團利用每一個選定列BY節。

SELECT country as grouper, to_char(created_at, '%Y-%u') as date_group, count(id) as total_count 
FROM "users" 
WHERE created_at >= '2013-10-01' 
AND created_at <= '2014-02-11' 
GROUP BY grouper, date_group 
ORDER BY date_group ASC