我的Oracle数据库中有一个下表:
如何选择大多数学生完成的课程? 我正在尝试以下SQL查询中的多个变体,但它不起作用 -
var ref = new Firebase("firebase url");
答案 0 :(得分:1)
由于这是一个Oracle数据库,我认为以下内容应该可行
SELECT * FROM
(select count(course) as pcourse, course
from studies
group by course
order by pcourse dec)
WHERE ROWNUM <= 1
回复评论
这是因为rownum 顺序分配给返回的行。
所以假设你把ROWNUM = 2,你的查询将返回第一行,暂时给它rownum为1.但由于它与条件ROWNUM = 2不匹配,它将被丢弃。然后它将继续获取第二行,并给它rownum 1,然后循环继续。
如果你想获得第N行,你可能会这样做
SELECT pcourse, course FROM
(select count(course) as pcourse, course, rownum as rn
from studies
group by course
order by pcourse dec)
WHERE rn = N
其中N是必需的行。
答案 1 :(得分:1)
您需要使用rownum
,这相当于TOP 1
(来自SQL Server)或LIMIT 1
(来自MySQL)。
select *
from
(select count(course) as pcourse
, course
from studies
group by course
order by pcourse desc) result_set
where rownum = 1
在较高级where rownum = 1
中使用SELECT
非常重要,因为Oracle要求您先对结果集进行排序,然后才会过滤行。
否则,如果您将where rownum = 1
条件包含在与获取数据的SELECT
相同的级别中,那么它将立即过滤到1行(它找到的第一行)并对其进行排序(这没有任何意义,因为它只会是一行)。
根据 @a_horse_with_no_name 的评论,显然Oracle让您可以在同一级别TOP 1
中编写SELECT
过滤条件,如下所示:
select count(course) as pcourse
, course
from studies
group by course
order by pcourse desc
fetch first 1 rows only;
答案 2 :(得分:1)
这应该可以,但是我没有创建你的测试数据,因为它是在图片中,请在下次包含为文本
SELECT
course
,COUNT(*) AS pcourse
FROM
Studies
GROUP BY
course
ORDER BY
COUNT(*) DESC
FETCH FIRST ROW ONLY
我仍然不确定如何获取第一行/选择前1 /限制1为Oracle,但@ a-horse_with_no_name正在教学,我正在学习,所以这里是刺。这是offest
和fetch
http://docs.oracle.com/javadb/10.5.3.0/ref/rrefsqljoffsetfetch.html