2017-05-04 33 views
0

这是问题#105 http://sql-ex.ru查询获取某列的另一列的,因为只有RANK()值最高ROW_NUM()值

这是数据库模式:Database Schema

问题: 统计学家爱丽丝,贝蒂,卡罗尔和戴安娜在产品表中编号行。 最初,他们按照制造商名称的升序对表格行进行排序。 Alice正在为每一行分配一个新数字,这样她就按照模型升序排列了同一个制造商的行。 另外三位统计人员将相同的编号分配给同一制造商的所有行。

  • 贝蒂分配从1开始的号码,每下一个制造商1。

  • 卡罗尔给出了这样数目的制造商,它数艾丽斯将给出本机的第一模型的数量增加。

  • 戴安娜给了一个制造商,这个数字爱丽丝会给这个制造商的最后一个模型。

输出:制造商,型号,已经由爱丽丝,贝蒂,Carol和戴安娜分别分配给表中的行数。

我想出了这个查询已经爱丽丝(A),贝蒂(B),卡罗尔(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 

但我无法找到黛安娜(d)中溶液。

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

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

+2

的MySQL不必须'ROW_NUMBER()'或'RANK()' –

回答

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

example

+0

非常感谢您的回答,它的工作...但你能向我解释背后的逻辑请问?我无法围绕它进行考虑^ _ ^“ – avarus

+0

检查示例。我要计算我的组和所有以前的组中的所有元素。 –

相关问题