首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择列表不在GROUP BY子句中

问选择列表不在GROUP BY子句中
EN

Stack Overflow用户
提问于 2020-03-17 17:37:14
回答 3查看 196关注 0票数 0

我有两个点和chantiers表,它们之间是belongsTo关系,我想显示chantiers的名称和我尝试过的每个chantier的销售量之和,但是它给了我错误。

代码语言:javascript
复制
$dataP = DB::table('chantiers')
         ->leftJoin('pointages','pointages.chantier_id','chantiers.id')
          ->selectRaw('COALESCE(SUM(pointages.sold),0) as sold,chantiers.chantier')
          ->groupBy('pointages.chantier_id')
          ->get();

点表

​

​

chantiers表

​

​

误差

​

EN

回答 3

Stack Overflow用户

发布于 2020-03-18 02:10:49

您的mysql版本是5.7+,所以请检查这个参考文献。

MySQL 5.7.5和up实现了功能依赖的检测。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下是此模式),则MySQL拒绝其选择列表的查询。

解决方案1:

检查config/database.php,如果您的mysql配置strict => true,您需要禁用ONLY_FULL_GROUP_BY,添加modes如下:

代码语言:javascript
复制
        'mysql' => [
            'driver' => 'mysql',
            ...
            'strict' => true,
            'engine' => null,
            'modes' => [
                //'ONLY_FULL_GROUP_BY',
                'STRICT_TRANS_TABLES',
                'NO_ZERO_IN_DATE',
                'NO_ZERO_DATE',
                'ERROR_FOR_DIVISION_BY_ZERO',
                'NO_AUTO_CREATE_USER',
                'NO_ENGINE_SUBSTITUTION'
           ],
        ],

PS: set strict => false也可以工作,但是禁用它会使你的应用程序不安全。

解决方案2:

使用价值

当启用ONLY_FULL_GROUP_BY SQL模式时,此函数对于按查询分组非常有用,对于MySQL拒绝您知道由于MySQL无法确定的原因而有效的查询的情况也很有用。函数返回值和类型与其参数的返回值和类型相同,但函数结果没有检查ONLY_FULL_GROUP_BY SQL模式。

代码语言:javascript
复制
$dataP = DB::table('chantiers')
         ->leftJoin('pointages','pointages.chantier_id','chantiers.id')
          ->selectRaw('COALESCE(SUM(pointages.sold),0) AS sold, ANY_VALUE(chantiers.chantier) AS chantier, pointages.chantier_id')
          ->groupBy('pointages.chantier_id')
          ->get();

PS:ANY_VALUE不存在于MariaDB上。

票数 1
EN

Stack Overflow用户

发布于 2020-03-17 19:35:34

仅在select字段上按可能分组

根据上面的查询,您不会在select字段中添加一个字段的组,这是Laravel给出错误的原因。

所以,你能不能试试下面哪个对你有用?

代码语言:javascript
复制
$dataP = DB::table('chantiers')
         ->leftJoin('pointages','pointages.chantier_id','chantiers.id')
          ->selectRaw('COALESCE(SUM(pointages.sold),0) as sold,chantiers.chantier,pointages.chantier_id')
          ->groupBy('pointages.chantier_id')
          ->get();

希望你得到你想要的答案

票数 0
EN

Stack Overflow用户

发布于 2020-03-18 04:50:27

在数据库sql中运行此命令

代码语言:javascript
复制
SET GLOBAL sql_mode='';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60727473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档