Mysql 使用group by时sql中出错

Mysql 使用group by时sql中出错,mysql,sql,Mysql,Sql,我有这个查询来将我网站上的文章作者分组,以及他们最近写了多少篇文章和最近发表的日期 问题在于此错误: 1055-选择列表的表达式4不在GROUP BY子句中,并且 包含未聚合的列“goltest.a.author\u id”,该列不是 功能上依赖于GROUP BY子句中的列;这是 与sql\u模式不兼容=仅\u完整\u组\u由 我真的不明白为什么它希望作者id出现在group by列表中,因为我没有选择它?对于那些感兴趣的人,我用这个方法修复了它,用日期的最大值替换子查询: SELECT

我有这个查询来将我网站上的文章作者分组,以及他们最近写了多少篇文章和最近发表的日期

问题在于此错误:

1055-选择列表的表达式4不在GROUP BY子句中,并且 包含未聚合的列“goltest.a.author\u id”,该列不是 功能上依赖于GROUP BY子句中的列;这是 与sql\u模式不兼容=仅\u完整\u组\u由


我真的不明白为什么它希望作者id出现在group by列表中,因为我没有选择它?

对于那些感兴趣的人,我用这个方法修复了它,用日期的最大值替换子查询:

SELECT
    COUNT(DISTINCT a.article_id) AS `counter`,
    u.username,
    u.user_id,
    MAX(a.date) AS `last_date`
FROM
    `articles` a
LEFT JOIN
    `users` u
ON
    u.user_id = a.author_id
LEFT JOIN
    `article_category_reference` c
ON
    a.`article_id` = c.`article_id`
WHERE
    a.`date` >= 1491004800 AND a.`date` <= 1495018102 AND a.`active` = 1 AND c.`category_id` NOT IN(63) AND a.author_id != 1844
GROUP BY
    u.`username`,
    u.`user_id`
ORDER BY
    `counter`
DESC
    ,
    last_date
DESC

感谢Shadow指出max:

您正在相关子查询中使用它。所以,你在某种程度上选择了它。为什么你要使用子查询而不仅仅是max?它在计算时会获取每个用户的最新日期,据我所知,单独使用max是行不通的。至少我看不出它是如何工作的?不,它没有得到最新的日期,它得到了一个具有最高id的文章的日期。这可能与最新的日期一致,也可能不一致。好吧,你是对的,我实际上可以使用max。但是我仍然存在a.date不在组中的问题,这不可能是因为我得到了数百行,不是每个用户一行
SELECT
    COUNT(DISTINCT a.article_id) AS `counter`,
    u.username,
    u.user_id,
    MAX(a.date) AS `last_date`
FROM
    `articles` a
LEFT JOIN
    `users` u
ON
    u.user_id = a.author_id
LEFT JOIN
    `article_category_reference` c
ON
    a.`article_id` = c.`article_id`
WHERE
    a.`date` >= 1491004800 AND a.`date` <= 1495018102 AND a.`active` = 1 AND c.`category_id` NOT IN(63) AND a.author_id != 1844
GROUP BY
    u.`username`,
    u.`user_id`
ORDER BY
    `counter`
DESC
    ,
    last_date
DESC