Mysql 错误1055我修正了,但为什么它一开始就给出了错误?

Mysql 错误1055我修正了,但为什么它一开始就给出了错误?,mysql,mysql-workbench,Mysql,Mysql Workbench,我已将用户名设置为不为空的唯一键 CREATE TABLE IF NOT EXISTS `users`( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `username` VARCHAR(255) NOT NULL, `created_at` TIMESTAMP DEFAULT NOW(), PRIMARY KEY (`id`), UNIQUE KEY `uk_uname` (`username`) ); 但是,

我已将
用户名
设置为不为空的唯一键

CREATE TABLE IF NOT EXISTS `users`(
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(255) NOT NULL,
    `created_at` TIMESTAMP DEFAULT NOW(),
    PRIMARY KEY (`id`),
    UNIQUE KEY `uk_uname` (`username`)
);
但是,当我试图找出人们登录的最受欢迎的日子时,我犯了一个错误

SELECT  `username`,
        DAYNAME(`created_at`) AS `day` 
    FROM `users`
        GROUP BY `day`;
“users.username在功能上不依赖于group by子句中的列”

因此,我搜索了stackoverflow,大多数人都说要禁用
仅限
组,但我不想禁用它,为什么我不能学习如何使用它

为了使代码工作,我必须添加
任何值(
username
它工作了

另一篇帖子的答案是: “对于其他用例:根据mysql文档,在给定这样的情况下,您不必仅禁用\u FULL\u GROUP\u,”如果name不是t的主键或唯一的NOTNULL列,则此查询无效。在这种情况下,无法推断任何函数依赖项,并出现错误:“”


但是我不是把
username
作为一个唯一的密钥吗?为什么会出现错误?

您说的是“将此特定“日期”列中具有相同值的这N行进行分组”,然后您说的是“选择此组的用户”,但数据库引擎没有得到任何指示,表明该组中有1个用户,每个进入组的原始行可能有一个不同的用户。这就是为什么你需要明确地告诉数据库引擎你不在乎,就像你所做的那样,或者它应该怎么在乎,比如先点或最后点的那一个。如果我告诉你这样一个问题,类似的问题是:“到街上去,给我你找到的头5个戴帽子的人。然后告诉我名字”(注意,不是名字,复数,而是名字,单数)。你刚才给我的那种奇怪的表情,这就是数据库引擎刚刚做的。我看到,通过尝试,它与MIN和MAX以及
用户名一起工作,我猜MIN是那天
的第一个到最后一个
和MAX last到第一个?。是否有某种first/first()last/last()?我不明白你说的first/first()或last/last()是什么意思,你得到的用户名是“最低”或“最早”的,或者“最高”或“最新”的,这取决于你点击的术语。