mysql - SQL Select SUM() 组函数使用无效

标签 mysql sql

我有以下查询,我在“sum(count(distinct idDriver)) as Conductores”中添加了 SUM(),但出现此错误:

错误代码:1111。群组功能使用无效

    select
    department as Delegación,
    company as Compañía,
    config as Configuración,
    docs as Documentos,
    sum(count(distinct idDriver)) as Conductores,
    sum(ko) as "Doc. incorrectos",
    round(sum(ko)/(docs*count(distinct idDriver))*100) as "% incumplimiento"
 from
    (
    select 
       cd.name as department,
       cfg_g.name as config, 
       c.businessname as company, 
       (select count(*) from widoc_config where idwidocconfiggroup=cfg_g.idwidocconfiggroup and idstatus=71001 and required=true) as docs, 
       wd.idDriver, 
       cfg_g.idwidocconfiggroup, 
       cfg.idwidocconfig, 
       cfg.iddocument, 
       a.idstatus, 
       if(a.idstatus=43002,"0","1") as ko
    from
        widoc_config_group cfg_g
        join widoc_config cfg on cfg.idwidocconfiggroup=cfg_g.idwidocconfiggroup and cfg.idstatus=71001 and cfg.required=true
        join widoc_client wc on wc.idclient=cfg_g.idclient and wc.idstatus=71001
        join client c on c.idclient=wc.idclientassociated and c.idstatus_client=5004
        join widoc_driver wd on wd.idwidocclient=wc.idwidocclient and wd.idstatus=71001
        join driver d on d.iddriver=wd.iddriver and d.idstatus=71001
        join widoc_fulfill_driver fd on fd.idwidocconfiggroup=cfg_g.idwidocconfiggroup and fd.idwidocdriver=wd.idwidocdriver
        left join attachment_group a on a.idclient=wc.idclientAssociated and a.iddocument=cfg.iddocument and a.idstatus!=43004 and a.idFK=wd.idDriver
        left join client_department cd on cd.idClientDepartment=wc.idClientDepartment and cd.idStatus=71001
    where
         cfg_g.idclient = 3683
        #wc.idclientAssociated = 1865
        and cfg_g.identitytype=73003
        and cfg_g.idstatus=71001
        ) t
 group by department,company;

我必须把这个HAVING代码放在哪里,我应该写什么?谢谢!

最佳答案

这里:

sum(count(distinct idDriver)) as Conductores,
sum(ko) as "Doc. incorrectos",
round(sum(ko)/(docs*count(distinct idDriver))*100) as "% incumplimiento"

你不能嵌套聚合函数:如果你仔细想想,sum(count(...))毫无意义。我怀疑你想要:

count(distinct idDriver) as Conductores,
sum(ko) as "Doc. incorrectos",
round(sum(ko)/(docs*count(distinct idDriver))*100) as "% incumplimiento"

此外,您还应该枚举 group by 子句中的所有非聚合列。即使当前缺失的列在功能上依赖于列出的列,这仍然是 SQL 中的最佳实践(也是大多数 RDBMS 上的规则,包括 MySQL,除非禁用选项 FULL_GROUP_BY_ONLY)。所以你想改变这个:

group by department,company

致:

group by department, company, config, docs

关于mysql - SQL Select SUM() 组函数使用无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58605221/

相关文章:

PHP : fetching image from mysql database (blob type)

c# - 无法连接到服务器(WAMP、phpmyadmin),将VS连接到数据库?

Mysql检查。一天的记录与不同日期的记录 'Same-Store Sales'

mysql - 我应该在 MySQL 中创建一个条目可以是多个字符串的列吗?

mysql query join 不起作用,但 sql "where"起作用

php - 是否可以使用 joomla 1.6 中的 p[hp 代码创建注册表单之类的表单?如果是,代码写在哪里,哪个数据库用于此?

mysql - 抛出错误 1452,而父行存在

SQL 数字数据类型截断值?

mysql - 计算来自同一列的各种子串

mySQL 查询将团队 ID 更改为团队名称并将 not null 设为空白