sql—如何在oracle中为distinct select生成序列号

w1e3prcc  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(542)

这个问题在这里已经有答案了

选择distinct field和row num只是为了显示一个id号,会产生重复的数据(3个答案)
10个月前关门了。
我的sql语句是

SELECT distinct(CATEGORY) as CategoryName
FROM APPLICATION
where applicationId = ?

这很好,但现在我想要的是categoryname,我需要顺序生成的数字。例如,如果不同类别计数为10,则每个类别名称的序号应为1到10。如果生成的序列号按类别排序就好了。

vwkv1x7d

vwkv1x7d1#

可以使用子查询:

SELECT CategoryName, rownum as seqnum
FROM (SELECT DISTINCT CATEGORY as CategoryName
      FROM APPLICATION 
      WHERE applicationId = ? 
     ) a;

如果确实要避免子查询,可以使用 dense_rank() :

SELECT DISTINCT CATEGORY as CategoryName, DENSE_RANK() OVER (ORDER BY CATEGORY) as seqnum
FROM APPLICATION 
WHERE applicationId = ?

或者,你可以用 GROUP BY :

SELECT CATEGORY as CategoryName, rownum as seqnum
FROM APPLICATION
WHERE applicationId = ? 
GROUP BY CATEGORY;

或者 rownum 或者 ROW_NUMBER() 在这种情况下可以使用。

blmhpbnm

blmhpbnm2#

按照sql操作的顺序,行数()在前面,因此在被distinct关键字删除之前会产生不同的值,而distinct关键字不完全是一组连续的数字。
所以,使用稠密秩()

SELECT DISTINCT
  CATEGORY AS CategoryName, 
  DENSE_RANK() OVER (ORDER BY CategoryName) row_number
FROM APPLICATION 
WHERE applicationId=? 
ORDER BY CategoryName, row_number

相关问题