[英]How to find the top or max Column value of a table?
下表是某种HTTP请求的日志:
+---------+----------+-----------+----------+
| County | Mobile | OS | Browser |
+---------+----------+-----------+----------+
| USA | iPhone | iOS | Safar |
| UK | Samsung | Android | Chrome |
| India | Motorola | Android | Chrome |
| India | Nokia | Android | Chrome |
| Russia | Nokia | Microsoft | Edge |
| Germany | Sony | Android | Chrome |
| India | Sony | Android | Chrome |
| Russia | Nokia | Microsoft | Edge |
| Germany | Sony | Android | Chrome |
| India | Motorola | Android | Chrome |
| Russia | Nokia | Android | Edge |
| Germany | Sony | Android | Chrome |
+---------+----------+-----------+----------+
如何找到每个县最常用的手机,操作系统和浏览器,并得到类似的结果
+---------+----------+-----------+----------+
| County | Mobile | OS | Browser |
+---------+----------+-----------+----------+
| USA | iPhone | iOS | Safar |
| UK | Samsung | Android | Chrome |
| India | Motorola | Android | Chrome |
| Russia | Nokia | Microsoft | Edge |
| Germany | Sony | Android | Chrome |
+---------+----------+-----------+----------+
因此,美国最常用的手机是iPhone,最常用的操作系统是iO,最常用的浏览器是Safar,依此类推...
如果您的DBMS支持窗口功能,可以尝试一下。
尝试使用CTE
write子查询通过County
, Mobile
, OS
, Browser
colnums获取COUNT
,并通过cnt
使用row_number
行号,然后获取rn=1
。
CREATE TABLE T(
County VARCHAR(50),
Mobile VARCHAR(50),
OS VARCHAR(50),
Browser VARCHAR(50)
);
INSERT INTO T VALUES ('USA','iPhone', 'iOS', 'Safar');
INSERT INTO T VALUES ('UK','Samsung', 'Android' , 'Chrome');
INSERT INTO T VALUES ('India','Motorola','Android' , 'Chrome');
INSERT INTO T VALUES ('India','Nokia','Android', 'Chrome');
INSERT INTO T VALUES ('Russia','Nokia','Microsoft', 'Edge');
INSERT INTO T VALUES ('Germany','Sony','Android','Chrome');
INSERT INTO T VALUES ('India','Sony','Android','Chrome');
INSERT INTO T VALUES ('Russia','Nokia','Microsoft','Edge');
INSERT INTO T VALUES ('Germany','Sony','Android','Chrome');
INSERT INTO T VALUES ('India','Motorola','Android','Chrome');
INSERT INTO T VALUES ('Russia','Nokia','Android','Edge');
INSERT INTO T VALUES ('Germany','Sony','Android','Chrome');
查询1 :
with cte as (
select County,Mobile,OS,Browser,COUNT(*) cnt
from T
GROUP BY County,Mobile,OS,Browser
)
SELECT
t1.County,
t1.Mobile,
t1.OS,
t1.Browser
FROM (
select t1.*,row_number() over(partition by County order by cnt desc) rn
from cte t1
) t1
where t1.rn = 1
ORDER BY COUNTY desc
结果 :
| COUNTY | MOBILE | OS | BROWSER |
|---------|----------|-----------|---------|
| USA | iPhone | iOS | Safar |
| UK | Samsung | Android | Chrome |
| Russia | Nokia | Microsoft | Edge |
| India | Motorola | Android | Chrome |
| Germany | Sony | Android | Chrome |
试试这个:它将在oracle中工作
select * from
(select max(rn) rn1 ,country
from
(
select *, row_number over partition by (Mobile, OS,Browser order by County) as rn
from tablename)a)x inner join
(
select *, row_number over partition by (Mobile, OS,Browser order by County) as rn
from tablename)b on b.rn=x.rn1 and b.country=x.country
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.