Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Oracle关于选择数据的帮助_Database_Oracle - Fatal编程技术网

Database Oracle关于选择数据的帮助

Database Oracle关于选择数据的帮助,database,oracle,Database,Oracle,我有一个表sal_信息如下 ID NAME SAL DEPTNO 100 SARMA 5000 10 101 SARATHI 5000 10 102 RAJESH 4000 10 103 PRAVEEN 4000 20 104 GOPI 4000 20 105 SHANKAR 3000 20 106 SHIVA 2000 30 107 SWAMI 1000 30 108 MOHAMED 500 30 我需要提取

我有一个表sal_信息如下

ID  NAME    SAL DEPTNO
100 SARMA   5000    10
101 SARATHI 5000    10
102 RAJESH  4000    10
103 PRAVEEN 4000    20
104 GOPI    4000    20
105 SHANKAR 3000    20
106 SHIVA   2000    30
107 SWAMI   1000    30
108 MOHAMED 500     30
我需要提取每个deptno上具有最高工资的行

我的输出应该是

ID  NAME    SAL DEPTNO
100 SARMA   5000    10
101 SARATHI 5000    10
103 PRAVEEN 4000    20
104 GOPI    4000    20
106 SHIVA   2000    30
我怎样才能做到这一点

我试过了

select * from dummy_tab where sal in (select max(sal) from dummy_tab)
它是根据表中的最高工资为我提供的。我需要把它包括在所有部门里


任何想法……

分析函数最适合于此。在这种情况下,我会使用。请注意,该链接包含有关
RANK
函数的聚合和分析风格的文档;这是你想读到的分析性文章

查询结果如下所示:

SELECT ID, Name, Sal, DeptNo
FROM (
  SELECT
    ID,
    Name,
    Sal,
    DeptNo,
    RANK() OVER (PARTITION BY DeptNo ORDER BY Sal DESC) AS SalRank
  FROM sal_info
)
WHERE SalRank = 1

要更深入地了解
排名的工作原理,请尝试仅运行内部查询。这将向您显示排名分配。

分析函数最适合于此。在这种情况下,我会使用。请注意,该链接包含有关
RANK
函数的聚合和分析风格的文档;这是你想读到的分析性文章

SELECT *
FROM 
   SAL_INFO
WHERE
    (DEPTNO, SAL)
    IN
    (
        SELECT 
            DEPTNO, MAX(SAL) 
        FROM SAL_INFO
        GROUP BY DEPTNO
    )
查询结果如下所示:

SELECT ID, Name, Sal, DeptNo
FROM (
  SELECT
    ID,
    Name,
    Sal,
    DeptNo,
    RANK() OVER (PARTITION BY DeptNo ORDER BY Sal DESC) AS SalRank
  FROM sal_info
)
WHERE SalRank = 1
要更深入地了解
排名的工作原理,请尝试仅运行内部查询。这将显示等级分配

SELECT *
FROM 
   SAL_INFO
WHERE
    (DEPTNO, SAL)
    IN
    (
        SELECT 
            DEPTNO, MAX(SAL) 
        FROM SAL_INFO
        GROUP BY DEPTNO
    )
这是一个

这是一个

@Tamim Salem

我用于获取我为您的答案指定的第二个条件的结果的查询

    select * from dummy_tab where (deptno,sal) in 
    (select deptno, max(sal) from   
    (select * from dummy_tab
    where (deptno,sal) in 
    (
    select deptno,max(sal) from dummy_tab group by deptno having count(*)>1
    )
    ) y group by y.deptno having count(*)>1
    )
@塔米姆·塞勒姆

我用于获取我为您的答案指定的第二个条件的结果的查询

    select * from dummy_tab where (deptno,sal) in 
    (select deptno, max(sal) from   
    (select * from dummy_tab
    where (deptno,sal) in 
    (
    select deptno,max(sal) from dummy_tab group by deptno having count(*)>1
    )
    ) y group by y.deptno having count(*)>1
    )

使用
Group By
have
。你好,我尝试了各种可能性,但没有成功…:-)感谢其他人的帮助使用
分组方式
拥有
。嗨,瑞克,我尝试了各种可能性,但没有成功…:-)感谢其他人的帮助,也可以查看稠密等级。如果每个部门只检索一行很重要,那么您需要在分区子句中有足够的ORDER BY子句来保证这一点。绝对正确@CleverIdeaWidgetry-我永远不知道我应该对平局和
RANK
density\u RANK
行数
进行多少讨论。在本例中,OP的示例包括领带,因此我决定不给它们(和我)额外的解释:)谢谢各位,这很好用。但我不熟悉SQL查询,也不熟悉RANK()函数。我将尝试学习这个。谢谢Ed Gibbs和Cleveriedea也会查密排。如果每个部门只检索一行很重要,那么您需要在分区子句中有足够的ORDER BY子句来保证这一点。绝对正确@CleverIdeaWidgetry-我永远不知道我应该对平局和
RANK
density\u RANK
行数
进行多少讨论。在本例中,OP的示例包括领带,因此我决定不给它们(和我)额外的解释:)谢谢各位,这很好用。但我不熟悉SQL查询,也不熟悉RANK()函数。我将尝试学习这个。谢谢Ed Gibbs和Cleveriedea这很好用。我还有一个要求。有没有一种方法可以让这个group by函数包含计数,这样如果行的计数大于一个显示,我不确定您到底需要什么,但似乎您需要编写一个不同的查询。我尝试了一些其他注释和其他人的帮助,我得到了我需要的。我的要求应该是从每个部门获得最高工资,并且对于一个特定的部门,最高工资应该至少有两个成员。这一切都很好。我还有一个要求。有没有一种方法可以让这个group by函数包含计数,这样如果行的计数大于一个显示,我不确定您到底需要什么,但似乎您需要编写一个不同的查询。我尝试了一些其他注释和其他人的帮助,我得到了我需要的。我的要求应该是从每个部门获得最高工资,对于一个特定的部门,最高工资也应该至少有两个成员