oracle 条件检查(瀑布订单)[重复]

hs1ihplo  于 2023-03-07  发布在  Oracle
关注(0)|答案(1)|浏览(131)
    • 此问题在此处已有答案**:

Fetch the rows which have the Max value for a column for each distinct value of another column(35个答案)
Select First Row of Every Group in sql [duplicate](2个答案)
Return row with the max value of one column per group [duplicate](3个答案)
Oracle Analytic function for min value in grouping [duplicate](4个答案)
15小时前关门了。
以下是场景:每个雇员根据某些条件属于多个类别。这些类别有一个顺序。在检查雇员的类别时,如果他属于类别1,我们就不应该检查其他类别。如果他不属于类别1,他属于类别2,那么我们就不应该检查其他类别,依此类推。我们如何在SELECT子句中编写这些内容?
我想不出一个查询开始。

bmp9r5qi

bmp9r5qi1#

如果你发布测试用例会更好;没有它,我们必须自己解决它,所以-这是我的尝试,没有多大意义(与category连接是不必要的,因为简单的MIN聚合函数与GROUP BY一起就可以了,但好吧,没关系-这只是一个例子)。
样本数据:

SQL> with
  2  category (cat_id, name, c_order) as
  3    -- lower C_ORDER is better
  4    (select 1, 'Cat 1', 1 from dual union all
  5     select 2, 'Cat 2', 2 from dual union all
  6     select 3, 'Cat 3', 3 from dual
  7    ),
  8  employee (emp_id, name, cat_id) as
  9    (select 100, 'Little', 2 from dual union all  --> this
 10     select 100, 'Little', 3 from dual union all
 11     select 200, 'Foot'  , 1 from dual union all  --> this
 12     select 200, 'Foot'  , 3 from dual
 13    ),

连接表和排名行列表示类别"秩序";然后获取排名最高的行:

14  temp as
 15    (select e.emp_id, e.name emp_name, c.name cat_name,
 16       row_number() over (partition by e.emp_id order by c.c_order) rn
 17     from employee e join category c on c.cat_id = e.cat_id
 18    )
 19  select t.emp_id, t.emp_name, t.cat_name
 20  from temp t
 21  where rn = 1;

      EMP_ID EMP_NAME   CAT_NAME
------------ ---------- ----------
         100 Little     Cat 2
         200 Foot       Cat 1

SQL>

如果那不是"它",就照我开头说的做:测试用例和预期结果后。

相关问题