0

このクエリが 2011 年と 2012 年のデータを返さない理由。誰か助けてくれませんか。よろしくお願いします。

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;
4

3 に答える 3

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
于 2012-07-16T06:27:40.567 に答える
0

HAVING句で非集計条件を使用することはできません。句に含まcountry_code='IN'れている必要があります。句が作成されたWHERE理由は、句が集計条件を処理できないためです。クエリでは、条件が集計されていないため、句は必要ありません。また、 vを削除することもできますHAVINGWHEREhavingALIAS

これを試してください:

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;
于 2012-07-16T06:08:46.813 に答える
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; 
于 2012-07-16T06:08:27.477 に答える