Mysql Sql查询不工作?
为什么此查询不返回2011年和2012年的数据。有人能帮我吗?先谢谢你Mysql Sql查询不工作?,mysql,sql,Mysql,Sql,为什么此查询不返回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
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;
您需要在ORDERBY子句以外的其他位置使用相同的表达式
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;
不能在HAVING子句中使用非聚合条件。国家/地区代码必须在WHERE子句中。创建HAVING子句的原因是WHERE子句无法处理聚合条件。在查询中,不需要having子句,因为您的条件未聚合。还可以删除别名v 试试这个:
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;
尝试将其包装在子选择中,然后在外部查询中对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
从表中发布会话日期和国家代码的一些记录。同时提供表结构。。表示您表格的说明。您确定您有过去2.5年的国家代码和会话日期数据吗?你能发布一个表格描述v_知识课程吗;还有一些示例数据和预期输出?在我看来,您的WHERE子句太破旧了。在having中使用列或表达式别名是可以接受的。请参阅。可以在having中使用列别名或表达式别名,但在where子句中不能使用。参考,也参考。