2011-11-03 17 views
0

出现我有表在MySQL数据库中的一些事件及其日期,我想退掉每星期的事件是这样的计数:计数平日当某些天是空的MySQL

SELECT DAYNAME(start_date) AS day, count(DAYNAME(start_date)) as number FROM events GROUP BY day 

,对伟大工程发生某些事件的日子,但不显示空闲的日子。我知道如果我有一个简单的桌子,我可以做一个简单的LEFT JOIN并显示所有的日子,当日子是空的时候count = 0。但有没有更简单的方法来做到这一点,而无需创建该表?任何其他想法?

在此先感谢

回答

1

总之“不”。原因是您正在尝试选择不存在的数据!

然而,由于有一个星期只有7天,你可以建立你的简单的“星期几”的飞行表:

select dayname('2011-10-31') union 
select dayname('2011-11-01') union 
select dayname('2011-11-02') union 
select dayname('2011-11-03') union 
select dayname('2011-11-04') union 
select dayname('2011-11-05') union 
select dayname('2011-11-06'); 

,然后从到事件表LEFT OUTER JOIN(如您已经描述过)。这将允许您运行查询而无需创建并填充简单表。

虽然为了重用和整洁,我会创建并使用一周中的几天创建并填充简单表格并使用它。

1
SELECT 
    COALESCE(DAYNAME(start_date),'empty') AS day 
    , count(start_date) as number 
FROM events 
RIGHT JOIN (SELECT 0 as dy FROM DUAL UNION ALL 
      SELECT 1 as dy FROM DUAL UNION ALL 
      SELECT 2 as dy FROM DUAL UNION ALL 
      SELECT 3 as dy FROM DUAL UNION ALL 
      SELECT 4 as dy FROM DUAL UNION ALL 
      SELECT 5 as dy FROM DUAL UNION ALL 
      SELECT 6 as dy FROM DUAL UNION ALL 
      SELECT 'empty' as dy FROM DUAL) ds 
     ON (ds.dy = COALESCE(DAYNAME(start_date),'empty')) 
GROUP BY ds.dy 
+0

这不会返回计数为0的日子,所以不是我要找的。无论如何谢谢 –

+0

@Javier,更新了答案 – Johan