【问题标题】:ORA-01791-Distinct and order byORA-01791-区分和排序
【发布时间】:2015-02-24 09:35:35
【问题描述】:

我想得到不同的"SkillCategory" 并按id 排序

这是下面的脚本:

SELECT  distinct EC.SKILL_CATEGORY from ETOPS_CHECK_FORM E
INNER JOIN EC_FORM_SKILL EC
ON EC.EC_FORM_ID=E.ID group by EC.SKILL_CATEGORY ORDER BY EC.ID

我做错了什么?

【问题讨论】:

    标签: sql oracle group-by sql-order-by distinct


    【解决方案1】:

    问题是您需要决定以哪个 id 进行排序。去掉distinct,然后在order by中使用聚合函数:

    SELECT EC.SKILL_CATEGORY
    FROM ETOPS_CHECK_FORM E INNER JOIN
         EC_FORM_SKILL EC
         ON EC.EC_FORM_ID = E.ID
    GROUP BY EC.SKILL_CATEGORY
    ORDER BY MIN(EC.ID);
    

    【讨论】:

    • 对不起,一个为我工作,这就像一个魅力:)
    【解决方案2】:

    如果您只想要不使用聚合函数的不同记录,请使用 DISTINCT 关键字而不是 GROUP BY

    试试这个:

    SELECT DISTINCT EC.SKILL_CATEGORY 
    FROM ETOPS_CHECK_FORM E
    INNER JOIN EC_FORM_SKILL EC ON EC.EC_FORM_ID = E.ID 
    ORDER BY EC.ID;
    

    【讨论】:

    • 它无法工作。 Oracle 不知道如何使用 key2 对其进行排序,因为它已经使用 key1 进行了区分..
    【解决方案3】:
    SELECT  distinct EC.SKILL_CATEGORY 
    FROM ETOPS_CHECK_FORM E
      INNER JOIN EC_FORM_SKILL EC
              ON EC.EC_FORM_ID=E.ID 
    GROUP BY EC.SKILL_CATEGORY ASC
    ORDER BY MAX(EC.ID)
    

    【讨论】:

      【解决方案4】:

      我想知道你到底想做什么...... ^^ 但是,如果你运行下面的脚本,你能告诉我们结果是否是你希望的:

      Select ec.skill_category as sc
      from EC_FORM_SKILL ec
      group by sc;
      

      待会见。

      【讨论】:

      • 该脚本没有对它进行排序,我是对的。应该按id排序
      • 所以按 ec.id 排序。但是你需要在选择中返回这个;)
      猜你喜欢
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      相关资源
      最近更新 更多