Oracle Sql:特定字段中的不同值

Oracle Sql : distinct value in a specific field

我有以下 table :

  **Country     Name        Number**
   us           John         45
   us           Jeff         35
   fr           Jean         31
   it           Luigi        25
   fr           Maxime       23
   ca           Justin       23

这个table是按号码排序的。我想查询每个国家/地区给我编号最大的名称:

  **Country     Name        Number**
   us           John         45
   fr           Jean         31
   it           Luigi         25
   ca           Justin        23

我尝试使用不同的,但如果我想打印所有东西,我不能只在国家/地区制作它...

有想法吗?'

编辑: table是通过子查询得到的

使用row_number():

select t.Country, t.Name, t.Number
from (select t.*,
             row_number() over (partition by country order by number desc) as seqnum
      from table t
     ) t
where seqnum = 1;

尝试以下查询:

SELECT Country, MAX(numbeer) FROM Table_Name GROUP BY Country

PFB 已更新查询以包含姓名:

SELECT t1.* FROM table1 t1 INNER JOIN 
(SELECT country, max(numbeer) as numbeer FROM table1 GROUP BY country) t2
ON t1.country=t2.country AND t1.numbeer=t2.numbeer;

我手边没有 Oracle 数据库,但我在我的 SQL 服务器数据库中使用了它,并且我很确定它可以在 Oracle 中使用(这意味着我认为我使用的是 ANSI sql应该在大多数数据库中工作):

SELECT m.Country,m.Name,m.number
FROM mytable m
INNER JOIN (
    select country, MAX(number) as number 
    FROM mytable GROUP BY Country
) AS tmp ON m.Country = tmp.Country and m.Number = tmp.number
ORDER BY m.Number DESC

这有一个额外的好处,当你在给定的国家有两个人有相同的号码时,它应该给你记录。

你没有给我们一个 table 名字所以我就叫它我的table.

SQL Fiddle

Oracle 11g R2 架构设置:

CREATE TABLE Countries AS
          SELECT 'us' AS Country, 'John' AS Name, 45 AS "Number" FROM DUAL
UNION ALL SELECT 'us' AS Country, 'Jeff' AS Name, 35 AS "Number" FROM DUAL
UNION ALL SELECT 'fr' AS Country, 'Jean' AS Name, 31 AS "Number" FROM DUAL
UNION ALL SELECT 'it' AS Country, 'Luigi' AS Name, 25 AS "Number" FROM DUAL
UNION ALL SELECT 'fr' AS Country, 'Maxime' AS Name, 23 AS "Number" FROM DUAL
UNION ALL SELECT 'ca' AS Country, 'Justin' AS Name, 23 AS "Number" FROM DUAL;

查询 1:

SELECT Country,
       MAX( Name ) KEEP ( DENSE_RANK FIRST ORDER BY "Number" DESC ) AS "Name",
       MAX( "Number" ) AS "Number"
FROM   Countries
GROUP BY Country

Results:

| COUNTRY |   Name | Number |
|---------|--------|--------|
|      ca | Justin |     23 |
|      fr |   Jean |     31 |
|      it |  Luigi |     25 |
|      us |   John |     45 |