在MySQL查询中,按3列以及重复月份名称的IFNULL()进行分组

在MySQL查询中,按3列以及重复月份名称的IFNULL()进行分组,mysql,Mysql,我正在处理一个查询,该查询旨在显示某个特定销售人员去年每月的查询数量 SELECT MONTHNAME(c.datefield) AS month, YEAR(c.datefield) AS year, IFNULL(( SELECT COUNT(cc.customer_date) FROM crm_customers WHERE cc.customer_salesperson = 5 LIMIT 1 ), 0

我正在处理一个查询,该查询旨在显示某个特定销售人员去年每月的查询数量

SELECT
    MONTHNAME(c.datefield) AS month,
    YEAR(c.datefield) AS year, 
    IFNULL((
        SELECT COUNT(cc.customer_date) 
        FROM crm_customers 
        WHERE cc.customer_salesperson = 5 LIMIT 1
    ), 0) AS Enquiries 
FROM calendar AS c 
LEFT JOIN crm_customers AS cc ON c.datefield = DATE(cc.customer_date) 
WHERE YEAR(c.datefield) = YEAR(CURRENT_DATE - INTERVAL 1 YEAR) 
GROUP BY YEAR(c.datefield), MONTH(c.datefield), cc.customer_salesperson 
但上面的查询是重复月份名称,不知道为什么

这是我的crm_客户表:

我将上面的表与一个日历表连接起来,日历表包含一个日期格式的列

如何排除重复的月份名称

编辑

我的日历表:


如果
日历
表是一个单列表,那么我只假设您没有运行MySQL 8.0,因此您的查询可以写成:

SELECT
    MONTHNAME(`c`.`datefield`) AS `Monthname`,
    YEAR(NOW())-1 AS `Year`,
    IFNULL(`t`.`Enquiries`,0) AS `Enquiries`
FROM `calendar` `c`
LEFT JOIN (SELECT
    MONTH(`cc`.`customer_date`) AS `Month`,
    YEAR(`cc`.`customer_date`) AS `Year`, 
    COUNT(`cc`.`customer_id`) AS `Enquiries` 
FROM `crm_customers` `cc`
WHERE YEAR(`cc`.`customer_date`) = YEAR(NOW())-1 
AND `cc`.`customer_salesperson`=5
GROUP BY MONTH(`cc`.`customer_date`)) `t`
ON `t`.`Month`= MONTH(`c`.`datefield`)
GROUP BY MONTH(`c`.`datefield`); 

你可以在

为什么
左连接
中查看示例?你也可以发布
日历
表架构吗?@PeterDarmis我做了,请检查我的更新问题。
左连接
是因为我们需要使用日历表为不存在的记录填充零值。是的,我没有使用MySQL 8.0。相反,我在5.6.17。那么,我是否需要像您一样完全以新的方式重写我的查询?我们不能编辑我的原始查询来修复错误吗?哇!这似乎是可行的,但我们不能通过一些修改让我的原始查询正常工作吗?@Sachin在早上的这个时候,没有睡觉,我想这是我的大脑能够找到的唯一一个解决方案。在某种程度上,这是您查询的修改版本。好的,彼得,谢谢您的帮助。我会尽力去理解它。事实上,我的问题与我的另一个问题有关,但它是-ve标记的。你能看看我的这个问题吗,这样我就可以更好地学习和理解了。谢谢Peter,你提供的解决方案真的帮助我解决了这个问题。干得好