首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker MySQL8 -不带组的聚合查询

Docker MySQL8 -不带组的聚合查询
EN

Stack Overflow用户
提问于 2021-01-15 02:50:12
回答 1查看 231关注 0票数 0

我正在使用Docker生成一个MySQL 8容器,以及PHP 7和phpMyAdmin。

在运行带有聚合函数的查询时,phpMyAdmin出现了问题。我想也许phpMyAdmin有什么问题。

所以我把它带到另一个数据库应用程序,叫做Navicat。我创建了到Docker MySQL 8容器的成功连接,当我试图运行相同的查询时,得到了相同的错误。详情如下:

代码语言:javascript
复制
In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'myDb.mytable.uid'; 
this is incompatible with sql_mode=only_full_group_by

这使我相信,问题必须在我的码头设置。下面是docker-compose.yml文件:

代码语言:javascript
复制
version: "3.7"
services:
  www:
    build: .
    ports:
     - "8001:80"
    volumes:
     - ./www:/var/www/html/
    links:
     - db
    networks:
     - default
  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    ports:
     - "3306:3306"
    environment:
     MYSQL_DATABASE: myDb
     MYSQL_USER: user
     MYSQL_PASSWORD: test
     MYSQL_ROOT_PASSWORD: test
    volumes:
     - ./dump:/docker-entrypoint-initdb.d
    networks:
     - default
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    links:
     - db:db
    ports:
     - 8000:80
    environment:
     MYSQL_USER: user
     MYSQL_PASSWORD: test
     MYSQL_ROOT_PASSWORD: test
volumes:
 mysql-data:
 persistent:

这是我的Dockerfile:

代码语言:javascript
复制
FROM php:7.0.30-apache
RUN docker-php-ext-install pdo pdo_mysql

我看到了几篇文章,告诉我使用以下命令更新sql_mode:

代码语言:javascript
复制
SET sql_mode = ''

但是返回的结果为零,我仍然得到相同的聚合错误。

我尝试了这个查询:

代码语言:javascript
复制
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

但我只得到以下结果:

拒绝

访问;此操作需要(至少一个)超级权限或SYSTEM_VARIABLES_ADMIN权限

它必须是我可以在我的docker-compose.yml文件中做的事情,这样我就可以运行查询,而不会得到聚合错误。

如果没有,我如何在没有错误的情况下成功地运行聚合函数的查询?

我曾尝试过以下消息来源:

Disable ONLY_FULL_GROUP_BY

SELECT list is not in GROUP BY clause and contains nonaggregated column .... incompatible with sql_mode=only_full_group_by

编辑

下面是我刚刚测试的一个简单的查询,它产生了问题中的错误:

代码语言:javascript
复制
SELECT
  uid,
  COUNT(pol)
FROM
  myTable
EN

回答 1

Stack Overflow用户

发布于 2021-01-15 03:22:34

代码语言:javascript
复制
SELECT
  uid,
  COUNT(pol)
FROM
  myTable

这个查询是随机返回单个uid (更准确地说,是不确定的),以及整个表中的非空pol值的数量(所以,1行结果)。它给出了警告,因为每次运行查询时,uid都可能有所不同。(即使您重复运行它,它可能看起来是相同的值,它可能在任何时候都会改变。)

很可能,你想要这样的东西:

代码语言:javascript
复制
SELECT
  uid,
  COUNT(pol)
FROM
  myTable
GROUP BY uid

这将为每个uid返回一行,以及该uid的非空pol值的数目。

您的原始查询没有很好地定义(相同查询和数据集的不同结果),这就是您看到错误的原因,该错误首先存在以保护您。不同的服务器没有给出错误的事实很可能是不同的sql_mode或不同的MySQL版本造成的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65729815

复制
相关文章

相似问题

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