1

我有这个显示ORA-00979:not a GROUP BY expression错误的查询。

我不是 sql pro 所以请你给我一个提示有什么问题吗?

SELECT *
  FROM (SELECT a.*, ROWNUM r___
          FROM (SELECT DISTINCT "SMTAPP"."XF_MASTER"."ID" AS "XfMasterEntityId",
                                "SMTAPP"."XP_MASTER_DETAIL"."WIFENAME" AS "XpMasterDetailEntityWifename",
                                "SMTAPP"."XP_MASTER_DETAIL"."COUNT" AS "XpMasterDetailEntityCount",
                                MAX ("SMTAPP"."XP_MASTER_DETAIL"."COUNT") AS "XpMasterDetailEntityCountMax"
                           FROM ("SMTAPP"."XF_MASTER" LEFT JOIN "SMTAPP"."XP_MASTER_DETAIL"
                                ON "SMTAPP"."XF_MASTER"."ID" =  "SMTAPP"."XP_MASTER_DETAIL"."XF_MASTER_ID")
                       GROUP BY "SMTAPP"."XP_MASTER_DETAIL"."COUNT"
                       ORDER BY "SMTAPP"."XF_MASTER"."ID" ASC) a
         WHERE ROWNUM < '11')
 WHERE r___ >= '1'
4

4 回答 4

3

使用 时GROUP BY,您选择的所有列必须使用聚合函数聚合或位于GROUP BY子句中。否则,您将拥有该列的项目列表,这不是单个值。

因此试试这个(用这个替换现有GROUP BY的):

GROUP BY "SMTAPP"."XF_MASTER"."ID", 
  "SMTAPP"."XP_MASTER_DETAIL"."WIFENAME", 
  "SMTAPP"."XP_MASTER_DETAIL"."COUNT"
于 2010-10-14T14:09:03.857 回答
2

尝试将其他列添加SELECTGROUP BY:IDWIFENAME

于 2010-10-14T14:07:50.833 回答
1

在最里面的 Query

SELECT DISTINCT 
"SMTAPP"."XF_MASTER"."ID" AS "XfMasterEntityId",
"SMTAPP"."XP_MASTER_DETAIL"."WIFENAME" AS "XpMasterDetailEntityWifename",
"SMTAPP"."XP_MASTER_DETAIL"."COUNT" AS "XpMasterDetailEntityCount",
MAX ("SMTAPP"."XP_MASTER_DETAIL"."COUNT") AS "XpMasterDetailEntityCountMax"

FROM ("SMTAPP"."XF_MASTER" LEFT JOIN "SMTAPP"."XP_MASTER_DETAIL"
ON "SMTAPP"."XF_MASTER"."ID" =  "SMTAPP"."XP_MASTER_DETAIL"."XF_MASTER_ID")
GROUP BY "SMTAPP"."XP_MASTER_DETAIL"."COUNT"
ORDER BY "SMTAPP"."XF_MASTER"."ID" ASC

您在 SELECT 中有列,即

"SMTAPP"."XF_MASTER"."ID" AS "XfMasterEntityId",

"SMTAPP"."XP_MASTER_DETAIL"."WIFENAME" AS "XpMasterDetailEntityWifename"

这不是的一部分,GROUP BY "SMTAPP"."XP_MASTER_DETAIL"."COUNT"这是不允许的。

您只能在 SELECT 中拥有属于 Group By 的列或使用 MAX / AVG 等聚合函数聚合的列

于 2010-10-14T14:10:21.243 回答
1

@eumiro 的意思是

   SELECT *
      FROM (SELECT a.*, ROWNUM r___
              FROM (SELECT DISTINCT "SMTAPP"."XF_MASTER"."ID" AS "XfMasterEntityId",
                                    "SMTAPP"."XP_MASTER_DETAIL"."WIFENAME" AS "XpMasterDetailEntityWifename",
                                    "SMTAPP"."XP_MASTER_DETAIL"."COUNT" AS "XpMasterDetailEntityCount",
                                    MAX ("SMTAPP"."XP_MASTER_DETAIL"."COUNT") AS "XpMasterDetailEntityCountMax"
                               FROM ("SMTAPP"."XF_MASTER" LEFT JOIN "SMTAPP"."XP_MASTER_DETAIL"
                                    ON "SMTAPP"."XF_MASTER"."ID" =  "SMTAPP"."XP_MASTER_DETAIL"."XF_MASTER_ID")
                           GROUP BY "SMTAPP"."XF_MASTER"."ID", "SMTAPP"."XP_MASTER_DETAIL"."WIFENAME", "SMTAPP"."XP_MASTER_DETAIL"."COUNT"
                           ORDER BY "SMTAPP"."XF_MASTER"."ID" ASC) a
             WHERE ROWNUM < '11')
     WHERE r___ >= '1'
于 2010-10-14T14:13:21.927 回答