【问题标题】:Error 1055 SQL - SELECT list is not in GROUP BY错误 1055 SQL - SELECT 列表不在 GROUP BY 中
【发布时间】:2020-06-05 03:32:31
【问题描述】:

我正在为这个 SQL 咨询而苦苦挣扎,错误消息是:

1055 - SELECT 列表的表达式 #10 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“ctrl2019.s.cgsc_cuenta”;这与 sql_mode=only_full_group_by 不兼容。

这里是代码:

SELECT c.cgcu_cuenta AS id,
            g.ger_cuenta, g.ger_nombre,
            p.cgp_cuenta, p.cgp_nombre,
            r.rub_cuenta, r.rub_nombre,
            c.cgcu_cuenta, c.cgcu_nombre,
            s.cgsc_cuenta, s.cgsc_nombre,
            SUM(IFNULL(a.debe, 0)) - SUM(IFNULL(a.haber, 0)) AS debe, 0 AS haber,
            'D' AS nat_id,
            c.cgcu_cuenta AS cuenta, c.cgcu_nombre AS nombre
        FROM ctrl2019.cat_Genero g
            INNER JOIN ctrl2019.cat_CgGrupo p USING(ger_id)
            INNER JOIN ctrl2019.cat_Rubro r USING(ger_id, cgp_id)
            INNER JOIN ctrl2019.cat_CgCuenta c USING(ger_id, cgp_id, rub_id)
            INNER JOIN ctrl2019.cat_CgSubcuenta s USING(ger_id, cgp_id, rub_id, cgcu_id)
            LEFT JOIN (
                SELECT a.ger_id, a.grp_id, a.rub_id, a.cta_id, a.sct_id,
                    SUM(IFNULL(a.msl_debe, 0)) AS debe, SUM(IFNULL(a.msl_haber, 0)) AS haber
                FROM ldf.vin_EntePublicoLDF e

                    INNER JOIN ldf.blz_Mensual_2019 a USING(gpo_id, ur_id)
                WHERE e.ejr_id = 2019
                    AND a.ger_id = 1
                    AND e.ent_id = 12
                    AND a.msc_id IN (0, 1, 2, 3)
                GROUP BY a.ger_id, a.grp_id, a.rub_id, a.cta_id, a.sct_id
            )a ON s.ger_id = a.ger_id AND s.cgp_id = a.grp_id AND s.rub_id = a.rub_id AND s.cgcu_id = a.cta_id AND s.cgsc_id = a.sct_id
        WHERE g.ger_id = 1
        GROUP BY g.ger_id, p.cgp_id, r.rub_id, c.cgcu_id;

我不知道为什么会出现这个错误,我是 sql 新手。

【问题讨论】:

  • 错误似乎很明显。您在 SELECT 中有未在 GROUP BY 中的未聚合列,例如 c.cgcu_cuenta

标签: sql mysql-error-1055


【解决方案1】:

您只需添加 GROUP BY 中存在于 SELECT 语句中的所有列。

【讨论】:

  • 用 OP 解决方案支持您的陈述。
  • 我已经这样做了,但是我有不同的消息:1055 - ORDER BY 子句的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列 'information_schema.PROFILING.SEQ' 这不是功能依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容
【解决方案2】:

这里看起来像是简单的聚合。我清理了代码并在GROUP BY 中添加了一些列。

SELECT 
    id = c.cgcu_cuenta
    ,g.ger_cuenta
    ,g.ger_nombre
    ,p.cgp_cuenta
    ,p.cgp_nombre
    ,r.rub_cuenta
    ,r.rub_nombre
    ,c.cgcu_cuenta
    ,c.cgcu_nombre
    ,s.cgsc_cuenta
    ,s.cgsc_nombre
    ,debe = SUM(IFNULL(a.debe, 0)) - SUM(IFNULL(a.haber, 0))
    ,haber = 0
    ,nat_id = 'D'
    ,cuenta = c.cgcu_cuenta
    ,nombre = c.cgcu_nombre
FROM ctrl2019.cat_Genero g
INNER JOIN ctrl2019.cat_CgGrupo p ON USING(ger_id)
INNER JOIN ctrl2019.cat_Rubro r ON USING(ger_id, cgp_id)
INNER JOIN ctrl2019.cat_CgCuenta c USING(ger_id, cgp_id, rub_id)
INNER JOIN ctrl2019.cat_CgSubcuenta s USING(ger_id, cgp_id, rub_id, cgcu_id)
LEFT JOIN (
        SELECT 
            a2.ger_id
            ,a2.grp_id
            ,a2.rub_id
            ,a2.cta_id
            ,a2.sct_id
            ,debe = SUM(IFNULL(a2.msl_debe, 0))
            ,haber = SUM(IFNULL(a2.msl_haber, 0))
        FROM ldf.vin_EntePublicoLDF E
        INNER JOIN ldf.blz_Mensual_2019 a2 USING(gpo_id, ur_id)
        WHERE e.ejr_id = 2019
            AND a2.ger_id = 1
            AND e.ent_id = 12
            AND a2.msc_id IN (0, 1, 2, 3)
        GROUP BY 
            a2.ger_id
            ,a2.grp_id
            ,a2.rub_id
            ,a2.cta_id
            ,a2.sct_id
    ) A 
    ON s.ger_id = A.ger_id 
        AND s.cgp_id = A.grp_id 
        AND s.rub_id = A.rub_id 
        AND s.cgcu_id = A.cta_id 
        AND s.cgsc_id = A.sct_id
WHERE g.ger_id = 1
GROUP BY 
    g.ger_id
    ,p.cgp_id
    ,r.rub_id
    ,C.cgcu_id
    ,c.cgcu_cuenta
    ,g.ger_cuenta
    ,g.ger_nombre
    ,p.cgp_cuenta
    ,p.cgp_nombre
    ,r.rub_cuenta
    ,r.rub_nombre
    ,c.cgcu_nombre
    ,s.cgsc_cuenta
    ,s.cgsc_nombre

【讨论】:

  • 我已经做到了,但是我有不同的消息:1055 - ORDER BY 子句的表达式#1 不在 GROUP BY 子句中,并且包含非聚合列 'information_schema.PROFILING.SEQ' 这不是功能依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容
  • 知道如何在没有最后一组的情况下做到这一点吗?
  • 您的查询中没有ORDER BY 子句,所以我不知道您是如何得到该错误的。为了进一步调试您的问题,您需要更新您的问题,描述您要完成的任务、表结构、示例数据和预期结果。
猜你喜欢
  • 2016-12-06
  • 2019-01-22
  • 1970-01-01
  • 2022-10-24
  • 2017-06-18
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
相关资源
最近更新 更多