【问题标题】:Oracle SQL Group By UpperOracle SQL Group By Upper
【发布时间】:2017-01-17 04:23:43
【问题描述】:

我有 3 个数据库表,我想在我的 SQL 查询中使用它们:

问题是,我想对 MYMAINSCHEMA.SURVEY 表中的“学校名称”值执行 GROUP BY。但是,“学校名称”有时可以是大写或小写。

这是我的 SQL:

select SR.SCHOOL_NUM,UPPER(S.SCHOOLNAME), COUNT(S.SWSID) AS NUMSTUDENTS 
from MYMAINSCHEMA.SURVEY S 
JOIN MYOTHERSCHEMA.SCHOOL_RTO SR ON S.SCHOOLCODE = SR.SCHOOL_NUM
JOIN  MYOTHERSCHEMA.RTO R ON R.RTO_NUM = SR.RTO_NUM 
GROUP BY SR.SCHOOL_NUM,UPPER(S.SCHOOLNAME)
ORDER BY S.SCHOOLNAME ASC;

运行上面给出的错误“不是 GROUP BY 表达式”。 如果我删除最后一行第 1 行和第 2 行中的 UPPER,它可以正常工作,但结果会返回重复的 SCHOOL 名称(有些是大写的,有些是小写的)。

有没有办法解决这个问题?

提前致谢。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    试试这个:

    select SR.SCHOOL_NUM,
      UPPER(S.SCHOOLNAME) SCHOOLNAME, -- added alias here
      COUNT(S.SWSID) AS NUMSTUDENTS 
    from MYMAINSCHEMA.SURVEY S 
    JOIN MYOTHERSCHEMA.SCHOOL_RTO SR ON S.SCHOOLCODE = SR.SCHOOL_NUM
    JOIN  MYOTHERSCHEMA.RTO R ON R.RTO_NUM = SR.RTO_NUM 
    GROUP BY SR.SCHOOL_NUM,UPPER(S.SCHOOLNAME)
    ORDER BY SCHOOLNAME ASC;  -- fixed here by sorting on the alias
                              -- (can use "UPPER(S.SCHOOLNAME)")
    

    UPPER(S.SCHOOLNAME) 用于聚合。因此,S.SCHOOLNAME 不可订购。使用UPPER(S.SCHOOLNAME),它是别名或列号。

    【讨论】:

    • 谢谢,确实是 ORDER BY 导致了问题。我被“不是 GROUP BY 表达式”错误消息吓跑了,这表明我的 GROUP BY 有问题,比 ORDER by 更重要。
    • 在上述情况下,Oracle 还允许在ORDER BY 子句中指定列号。 ORDER BY 2 ASC 在这种情况下是完全可以接受的。
    【解决方案2】:

    问题是ORDER BY。也可以在那里使用UPPER()

    ORDER BY UPPER(S.SCHOOLNAME) ASC;
    

    如果我假设 school_num 实际上是独一无二的,那么我可能会建议:

    select SR.SCHOOL_NUM, MAX(UPPER(S.SCHOOLNAME)),
            COUNT(S.SWSID) AS NUMSTUDENTS 
    from MYMAINSCHEMA.SURVEY S join
         MYOTHERSCHEMA.SCHOOL_RTO SR 
         on S.SCHOOLCODE = SR.SCHOOL_NUM join
         MYOTHERSCHEMA.RTO R 
         on R.RTO_NUM = SR.RTO_NUM 
    group by SR.SCHOOL_NUM
    order by MAX(UPPER(S.SCHOOLNAME)) ASC;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2022-09-22
      • 2011-08-14
      • 2018-06-01
      • 2014-12-17
      • 2017-06-25
      • 1970-01-01
      相关资源
      最近更新 更多