2012-07-16 119 views
0

爲什麼這個查詢沒有返回2011年和2012年的數據。任何人都可以幫助我。提前感謝。Sql查詢不起作用?

SELECT 
    country_code, 
    SUM(`attendance`) as k6_attendance, 
    count(*) as total_events , 
    IF(MONTH(`session_date`)<5,YEAR(`session_date`),YEAR(`session_date`)+1) as YR2 
    FROM `v_knowledge_session` v 
    WHERE session_date >0 
    Group by YR2,country_code 
    HAVING YR2>(YEAR(NOW())-2) AND country_code='IN' 
    ORDER BY country_code,YR2; 
+0

帖子來自表格的'session_date'和'country_code'的一些記錄。 – 2012-07-16 06:07:51

+0

也提供您的表格結構.. 意味着您的表格的描述.. – 2012-07-16 06:08:33

+0

您確定您在過去的2.5年內有country_code ='IN'*和* session_date的數據嗎?你可以發表一個表格描述('DESCRIBE v_knowledge_session;'和一些示例數據和期望的輸出嗎? – 2012-07-16 06:13:55

回答

0

您需要使用ORDER比其他地方一樣的表情BY子句

SELECT country_code,SUM(`attendance`) as k6_attendance,count(*) as total_events , 
    IF(MONTH(`session_date`)<5,YEAR(`session_date`),YEAR(`session_date`)+1) as YR2 
    FROM `v_knowledge_session` v 
    WHERE session_date >0 
    Group by IF(MONTH(`session_date`)<5,YEAR(`session_date`),YEAR(`session_date`)+1) ,country_code 
    HAVING IF(MONTH(`session_date`)<5,YEAR(`session_date`),YEAR(`session_date`)+1) >(YEAR(NOW())-2) AND country_code='IN' 
    ORDER BY country_code,YR2; 
+1

在'having'中使用列或表達式* aliases *是可以接受的。請參考[* here *](http://www.mysqltutorial.org/mysql-having.aspx)。 – 2012-07-16 06:12:47

+0

它不工作。 – 2012-07-16 06:24:56

0

不能在HAVING子句中使用非聚集狀態。 country_code='IN'必須在WHERE條款中。 HAVING子句創建的原因是因爲WHERE子句無法處理聚合條件。在您的查詢中,having子句不需要,因爲您的條件未彙總。您還可以刪除ALIASv

試試這個:

SELECT country_code, 
      SUM(`attendance`) as k6_attendance, 
      count(*) as total_events , 
      IF(MONTH(`session_date`) < 5 , 
       YEAR(`session_date`), 
       YEAR(`session_date`) + 1) as YR2 
FROM  `v_knowledge_session` 
WHERE  session_date > 0 AND country_code='IN' AND YR2 > (YEAR(NOW())-2) 
Group by YR2, country_code 
ORDER BY country_code,YR2; 
+0

不可以。在'having'中使用列或表達式* aliases *是可以接受的,但不能在'where'子句。請參閱[* here *](http://www.mysqltutorial.org/mysql-having.aspx),[* here *](http://stackoverflow.com/questions/200200/can-you -use-an-alias-in-the-where-clause-in-mysql)和[*列別名問題*](http://dev.mysql.com/doc/refman/5.0/en/problems- with-alias.html)。 – 2012-07-16 06:16:35

1

嘗試在外部查詢包裹它在一個子查詢,然後使上YR2比較算賬:

SELECT a.* 
FROM 
(
    SELECT 
     country_code, 
     SUM(attendance) AS k6_attendance, 
     COUNT(*) AS total_events, 
     IF(MONTH(session_date)<5,YEAR(session_date),YEAR(session_date)+1) AS YR2 
    FROM v_knowledge_session v 
    WHERE session_date > 0 AND country_code = 'IN' 
    GROUP BY YR2, country_code 
) a 
WHERE 
    a.YR2 > YEAR(NOW())-2 
ORDER BY 
    a.country_code, a.YR2