小编Pew*_*Pew的帖子

GROUP BY忽略属性

例如,我有这个表:

itemgroup | 描述| 价格
A,a,10
A,b,12
A,c,14
B,g,11
B,h,16

现在我想在一个组中选择价格最高的行,如下所示:

A,c,14
B,h,16

SQL查询(功能齐全)让我接近这个:

SELECT itemgroup, MAX( price ) 
FROM table
GROUP BY itemgroup
Run Code Online (Sandbox Code Playgroud)

A,14
B,16

通过尝试这个我得到一个"不是GROUP BY表达式"-error:

SELECT itemgroup, description, MAX( price ) 
FROM table
GROUP BY itemgroup
Run Code Online (Sandbox Code Playgroud)

我需要像这样的伪查询:

SELECT itemgroup, IGNORE( description), MAX( price ) 
FROM table
GROUP BY itemgroup
Run Code Online (Sandbox Code Playgroud)

我希望我能解释一下我的小问题.

sql sql-order-by oracle10g

9
推荐指数
2
解决办法
9371
查看次数

在没有ROWNUM的情况下选择前N行?

我希望你能帮我做作业:)

我们需要构建一个输出前N名最佳薪酬员工的查询.

我的版本完美无缺.
例如前三名:

SELECT name, salary
FROM staff
WHERE salary IN ( SELECT * 
                  FROM ( SELECT salary
                         FROM staff 
                         ORDER BY salary DESC ) 
                  WHERE ROWNUM <= 3 )
ORDER BY salary DESC
;
Run Code Online (Sandbox Code Playgroud)

请注意,这将输出位于前3名且薪水相同的员工.

1:Mike,4080
2:Steve,2800
2:Susan,2800
2:Jack,2800
3:Chloe,1400


但现在我们的老师不允许我们使用ROWNUM.
我搜索得很远,没有找到任何可用的东西.


我的第二个解决方案归功于Justin Caves的暗示.

首先我试过这个:

SELECT name, salary, ( rank() OVER ( ORDER BY salary DESC ) ) as myorder
FROM staff
WHERE myorder <= 3
;
Run Code Online (Sandbox Code Playgroud)

错误消息是:"myorder:invalid identifier"

感谢DCookie,现在很清楚:

"[...]在评估where子句之后应用分析,这就是为什么你得到myorder是无效标识符的错误."

包装SELECT解决了这个问题:

SELECT *
FROM …
Run Code Online (Sandbox Code Playgroud)

oracle rownum

4
推荐指数
1
解决办法
3万
查看次数

标签 统计

oracle ×1

oracle10g ×1

rownum ×1

sql ×1

sql-order-by ×1