Mysql 在单个SELECT语句中获取每月数据分布

Mysql 在单个SELECT语句中获取每月数据分布,mysql,sql,Mysql,Sql,我需要使用一个mysql语句每月分发一次数据。下面语句的预期结果:一个包含12行的表。如果一个月内没有可用数据,则该月应返回0。但是,在当前SQL语句的结果中,如果缺少数据,则缺少一行或多行。我错过了什么 选择m.月作为m1,选择月(从\u UNIXTIME(crdate))作为m2, 求和(当keylock=1时为1,否则0结束)为c1,求和(当keylock=2时为1,否则0结束)为c2 从tx_bhm_域_模型_访问a 右外连接( 选择1作为月份 联合选择2作为月份 工会选择3作为月份 工

我需要使用一个mysql语句每月分发一次数据。下面语句的预期结果:一个包含12行的表。如果一个月内没有可用数据,则该月应返回0。但是,在当前SQL语句的结果中,如果缺少数据,则缺少一行或多行。我错过了什么

选择m.月作为m1,选择月(从\u UNIXTIME(crdate))作为m2,
求和(当keylock=1时为1,否则0结束)为c1,求和(当keylock=2时为1,否则0结束)为c2
从tx_bhm_域_模型_访问a
右外连接(
选择1作为月份
联合选择2作为月份
工会选择3作为月份
工会选择4作为月份
工会选择5作为月份
工会选择6作为月份
工会选择7作为月份
工会选择8作为月份
工会选择9作为月份
工会选择10作为月份
工会选择11作为月份
联合选择12作为月份)m
月日(自上次时间(a.crdate))=月日
其中,年份(自下一个时间(a.crdate))=2018年
按月分组
按月订购
需要在
ON
子句中进行
年()比较。我更喜欢左连接

SELECT m.Month as m1, MONTH(FROM_UNIXTIME(crdate)) as m2,
       SUM(CASE WHEN keylock = 1 THEN 1 ELSE 0 END) AS c1,
       SUM(CASE WHEN keylock = 2 THEN 1 ELSE 0 END) AS c2
FROM (SELECT 1 AS Month UNION ALL
      SELECT 2 AS Month UNION ALL 
      SELECT 3 AS Month UNION ALL
      SELECT 4 AS Month UNION ALL 
      SELECT 5 AS Month UNION ALL
      SELECT 6 AS Month UNION ALL
      SELECT 7 AS Month UNION ALL
      SELECT 8 AS Month UNION ALL
      SELECT 9 AS Month UNION ALL
      SELECT 10 AS Month UNION ALL
      SELECT 11 AS Month UNION ALL
      SELECT 12 AS Month
     ) m LEFT JOIN
     tx_bhm_domain_model_access a
     ON MONTH(FROM_UNIXTIME(a.crdate)) = m.Month AND
        YEAR(FROM_UNIXTIME(a.crdate)) = 2018 
GROUP BY m.Month
ORDER BY m.Month;
我还将
UNION
s更改为
UNION ALL
s。无需产生删除重复项的开销。

需要在
ON
子句中进行
年()比较。我更喜欢左连接

SELECT m.Month as m1, MONTH(FROM_UNIXTIME(crdate)) as m2,
       SUM(CASE WHEN keylock = 1 THEN 1 ELSE 0 END) AS c1,
       SUM(CASE WHEN keylock = 2 THEN 1 ELSE 0 END) AS c2
FROM (SELECT 1 AS Month UNION ALL
      SELECT 2 AS Month UNION ALL 
      SELECT 3 AS Month UNION ALL
      SELECT 4 AS Month UNION ALL 
      SELECT 5 AS Month UNION ALL
      SELECT 6 AS Month UNION ALL
      SELECT 7 AS Month UNION ALL
      SELECT 8 AS Month UNION ALL
      SELECT 9 AS Month UNION ALL
      SELECT 10 AS Month UNION ALL
      SELECT 11 AS Month UNION ALL
      SELECT 12 AS Month
     ) m LEFT JOIN
     tx_bhm_domain_model_access a
     ON MONTH(FROM_UNIXTIME(a.crdate)) = m.Month AND
        YEAR(FROM_UNIXTIME(a.crdate)) = 2018 
GROUP BY m.Month
ORDER BY m.Month;

我还将
UNION
s更改为
UNION ALL
s。无需承担删除重复项的开销。

对于您缺少的内容,请参阅“对于您缺少的内容,请参阅您拯救我的一天!”!你救了我一天!