Mil*_*ETE 52 mysql mysql-error-1055
我的查询:
select libelle,credit_initial,disponible_v,sum(montant) as montant
FROM fiche,annee,type where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee
and annee = year(current_timestamp) GROUP BY libelle order by libelle asc
Run Code Online (Sandbox Code Playgroud)
Mil*_*ETE 89
我一直在努力工作,我已经测试了它,它正在使用灯服务器mysql版本5.12
那么,成功的步骤:
sudo vim /etc/mysql/conf.d/mysql.cnf滚动到文件复制和粘贴的底部
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
到文件的底部
sudo service mysql restart 重启MySQL.完成!
Hen*_*nry 41
这对我有用:
mysql -u root -p
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Run Code Online (Sandbox Code Playgroud)
第一步你可能需要sudo:
sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)
gr1*_*e4r 19
您需要在GROUP BY子句中指定您不用于聚合函数的所有列,如下所示:
select libelle,credit_initial,disponible_v,sum(montant) as montant
FROM fiche,annee,type where type.id_type=annee.id_type and annee.id_annee=fiche.id_annee
and annee = year(current_timestamp) GROUP BY libelle,credit_initial,disponible_v order by libelle asc
Run Code Online (Sandbox Code Playgroud)
该full_group_by模式基本上使您编写更多惯用的SQL.如果您愿意,可以关闭此设置.MySQL文档中概述了不同的方法.这是MySQL对上述内容的定义:
MySQL 5.7.5及更高版本实现了对功能依赖的检测.如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下是这样),MySQL拒绝查询,其中选择列表,HAVING条件或ORDER BY列表引用既未在GROUP BY子句中命名也未在功能上依赖于它们的非聚合列.(在5.7.5之前,MySQL不检测功能依赖性,默认情况下不启用ONLY_FULL_GROUP_BY.有关5.7.5之前行为的描述,请参阅MySQL 5.6参考手册.)
您收到错误的原因是您的版本<5.7.5
Ani*_*pta 18
您可以 通过某些命令禁用 sql_mode = only_full_group_by,您可以通过终端或MySql IDE尝试此操作
mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Run Code Online (Sandbox Code Playgroud)
我试过这个并为我工作过.谢谢 :)
小智 12
解决方案1:从mysql控制台中删除ONLY_FULL_GROUP_BY
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Run Code Online (Sandbox Code Playgroud)
你可以在这里阅读更多
解决方案2:从phpmyadmin中删除ONLY_FULL_GROUP_BY
Open phpmyadmin & select localhost
Click on menu Variables & scroll down for sql mode
Click on edit button to change the values & remove ONLY_FULL_GROUP_BY & click on save.
Run Code Online (Sandbox Code Playgroud)

小智 9
因此,让我们充分理解,假设您有一个在本地主机中工作但在生产模式下不起作用的查询,这是因为MySQL 5.7 and above他们决定默认激活sql_mode=only_full_group_by,基本上它是一种严格模式,阻止您选择非聚合字段。
这是查询(在本地工作但不在生产模式下工作):
\n\nSELECT post.*, YEAR(created_at) as year\nFROM post\nGROUP BY year\n\nSELECT post.id, YEAR(created_at) as year // This will generate an error since there are many ids\nFROM post\nGROUP BY year\nRun Code Online (Sandbox Code Playgroud)\n\n要验证是否已sql_mode=only_full_group_by激活,您应该执行以下查询:
SELECT @@sql_mode; //localhost\nRun Code Online (Sandbox Code Playgroud)\n\n输出:IGNORE_SPACE, STRICT_TRANS, ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\n(如果您没有看到它,则表示它已停用)
但如果在生产模式下尝试,或者在某个地方出现错误,则应该激活它:
\n\nSELECT @@sql_mode; //production\nRun Code Online (Sandbox Code Playgroud)\n\n输出: ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO... \n这就是ONLY_FULL_GROUP_BY我们要在这里寻找的。
否则,如果您使用phpMyAdmin,则转到 ->Variables并搜索sql_mode
让我们以前面的例子为例并对其进行调整:
\n\nSELECT MIN(post.id), YEAR(created_at) as year //Here we are solving the problem with MIN()\nFROM post\nGROUP BY year\nRun Code Online (Sandbox Code Playgroud)\n\n同样对于MAX()
如果我们想要所有 ID,我们将需要:
\n\nSELECT GROUP_CONCAT(post.id SEPARATOR ','), YEAR(created_at) as year\nFROM post\nGROUP BY year\nRun Code Online (Sandbox Code Playgroud)\n\n或另一个新添加的功能:
\n\nSELECT ANY_VALUE(post.id), YEAR(created_at) as year \nFROM post\nGROUP BY year\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x9a\xa0\xef\xb8\x8f MariaDB 不存在 ANY_VALUE
\n\n如果您想要所有字段,那么您可以使用相同的:
\n\nSELECT ANY_VALUE(post.id), ANY_VALUE(post.slug), ANY_VALUE(post.content) YEAR(created_at) as year \nFROM post\nGROUP BY year\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x9d\x8c 要停用,sql_mode=only_full_group_by您需要执行以下查询:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));\nRun Code Online (Sandbox Code Playgroud)\n\n抱歉小说,希望对你有帮助。
\n基于 5.7.5 ONLY_FULL_GROUP_BY 的默认配置您应该使用组中所有非聚合列
select libelle,credit_initial,disponible_v,sum(montant) as montant
FROM fiche,annee,type
where type.id_type=annee.id_type
and annee.id_annee=fiche.id_annee
and annee = year(current_timestamp)
GROUP BY libelle,credit_initial,disponible_v order by libelle asc
Run Code Online (Sandbox Code Playgroud)
你必须通过什么聚合NOT IN的group by条款.
所以,有两个选项... 添加Credit_Initial和Disponible_v到group by
要么
MAX( Credit_Initial ) as Credit_Initial, MAX( Disponible_v ) as Disponible_v如果您知道值无论如何都要保持不变并且没有其他影响,请将它们更改为.
| 归档时间: |
|
| 查看次数: |
95985 次 |
| 最近记录: |