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.
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
| COUNTRY | Name | Number |
|---------|--------|--------|
| ca | Justin | 23 |
| fr | Jean | 31 |
| it | Luigi | 25 |
| us | John | 45 |
我有以下 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.
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
| COUNTRY | Name | Number |
|---------|--------|--------|
| ca | Justin | 23 |
| fr | Jean | 31 |
| it | Luigi | 25 |
| us | John | 45 |