我的sql语句
SELECT
WEEKDAY(osr.created_date) AS weekDay,
IF (count(1) IS NULL, 0, count(1)) AS num
FROM osr_work AS osr
INNER JOIN el_user AS el ON el.id = 141
WHERE
osr.teacher_id = 141 AND
YEARWEEK(date_format(osr.created_date,'%Y-%m-%d')) = YEARWEEK(now())
GROUP BY WEEKDAY(osr.created_date);
结果:
0-6:分别代表周一至周日
我希望得到周一至周日所有的数据,因为周一和周五,周六,周日没有数据,就默认num为0;我该如何写,求指导!!!
SELECT
osr_weekday.weekDay,
count(1) AS num
FROM
osr_work osr,osr_weekday
WHERE
WEEKDAY(osr.created_date) = osr_weekday.weekDay AND
osr.teacher_id = 141 AND
YEARWEEK(date_format(osr.created_date,'%Y-%m-%d')) = YEARWEEK(now())
GROUP BY osr_weekday.weekDay
union ALL
SELECT
osr_weekday.weekDay ,
0
FROM
osr_weekday
WHERE
osr_weekday.weekDay not in (
SELECT
osr_weekday.weekDay
FROM
osr_work osr,
osr_weekday
WHERE
WEEKDAY(osr.created_date) = osr_weekday.weekDay AND
osr.teacher_id = 141 AND
YEARWEEK(date_format(osr.created_date,'%Y-%m-%d')) = YEARWEEK(now())
GROUP BY osr_weekday.weekDay
)
ORDER BY weekDay
想把not in优化,折腾了半天还是老样子~有带飞的吗
解决方案2:日期left join 你要查询的条件,然后在从这个获取的数据集中查询数据,然后判断num是不是null就行了
解决方案3:建议建一张辅佐表 weekDay 0-6,num 全部为0, left join
辅佐表就可以了。
改用LEFT JOIN
就行了呀。