查询以获得列AS的最高ROW_NUM()值仅为另一列的RANK()值

时间:2017-05-04 15:25:57

标签: mysql sql ranking

问题#105 http://sql-ex.ru

这是数据库架构:Database Schema

问题: 统计学家Alice,Betty,Carol和Diana在Product表中对行进行编号。 最初,他们都按照制造商名称的升序对表格行进行了排序。 Alice正在为每一行分配一个新号码,这样她就可以通过模型升序来排序同一个制造商的行。 其他三位统计员正在为同一制造商的所有行分配相同的数字。

  • Betty从1开始分配数字,每个下一个制造商将数字增加1。

  • Carol将这个号码提供给制造商,这是Alice为该制造商的第一个型号提供的数字。

  • 戴安娜给一个制造商提供了这样的号码,爱丽丝会为这个制造商的最后一个型号提供这个号码。

输出:制造商,型号,分别由Alice,Betty,Carol和Diana分配给表行的数字。

我已经为Alice(A),Betty(B),Carol(C)提出了这个问题

SELECT maker, model, 
 ROW_NUMBER() OVER (ORDER BY maker,model ASC) A,
 DENSE_RANK() OVER(ORDER BY maker) B,
 RANK() OVER (ORDER BY maker) C
 FROM product
 ORDER BY model ASC

但我找不到Diana(D)专栏的解决方案。

根据网站,这是正确的查询应该给出的结果: Results a correct query should give

感谢您的帮助,时间和理解。

1 个答案:

答案 0 :(得分:2)

SELECT 
       (SELECT COUNT(*)
        FROM product T2
        WHERE T2.[maker] <= T1.[maker]) as D
FROM product T1

请参阅example