Sql 查找具有两列的秩
我有以下查询来查找排名Sql 查找具有两列的秩,sql,oracle,Sql,Oracle,我有以下查询来查找排名 SELECT a.appName,RANK() OVER (PARTITION BY a.appName, b.depName ORDER BY a.appName) as RANK,b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a inner join tbl_users b on b.userName = a.userName where a.date_time b
SELECT a.appName,RANK() OVER (PARTITION BY a.appName, b.depName ORDER BY a.appName)
as RANK,b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a
inner join tbl_users b on b.userName = a.userName
where a.date_time between '01-JUN-12' and '20-JUN-14' and a.appName like '%'
group by a.appName,b.depName order by a.appName;
但它给了我不正确的结果
appName RANK depName visitors
app1 1 dep1 1
app1 1 dep2 1
app1 1 dep3 2
app2 1 dep1 3
app2 1 dep2 1
app2 1 dep3 5
app3 1 dep2 2
app3 1 dep5 8
app4 1 dep1 2
app4 1 dep5 13
app5 1 dep5 2
结果应该是这样
appName RANK depName visitors
app1 1 dep1 1
app1 2 dep2 1
app1 3 dep3 2
app2 1 dep1 3
app2 2 dep2 1
app2 3 dep3 5
app3 1 dep2 2
app3 2 dep5 8
app4 1 dep1 2
app4 2 dep5 13
app5 1 dep5 2
你知道这里有什么问题吗?可能是这样的:
SELECT a.appName,RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
......
WITH CTE
AS
(
SELECT RANK() OVER(PARTITION BY appName ORDER BY depName) AS Rank
....
)
SELECT
*
FROM
CTE
WHERE
CTE.Rank<=10;
您也可以这样做:
SELECT a.appName,ROW_NUMBER() OVER(PARTITION BY a.appName ORDER BY b.depName)
......
来回应你的评论。你可以这样做:
SELECT a.appName,RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
......
WITH CTE
AS
(
SELECT RANK() OVER(PARTITION BY appName ORDER BY depName) AS Rank
....
)
SELECT
*
FROM
CTE
WHERE
CTE.Rank<=10;
也许是这样的:
SELECT a.appName,RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
......
WITH CTE
AS
(
SELECT RANK() OVER(PARTITION BY appName ORDER BY depName) AS Rank
....
)
SELECT
*
FROM
CTE
WHERE
CTE.Rank<=10;
您也可以这样做:
SELECT a.appName,ROW_NUMBER() OVER(PARTITION BY a.appName ORDER BY b.depName)
......
来回应你的评论。你可以这样做:
SELECT a.appName,RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
......
WITH CTE
AS
(
SELECT RANK() OVER(PARTITION BY appName ORDER BY depName) AS Rank
....
)
SELECT
*
FROM
CTE
WHERE
CTE.Rank<=10;
也许是这样的:
SELECT a.appName,RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
......
WITH CTE
AS
(
SELECT RANK() OVER(PARTITION BY appName ORDER BY depName) AS Rank
....
)
SELECT
*
FROM
CTE
WHERE
CTE.Rank<=10;
您也可以这样做:
SELECT a.appName,ROW_NUMBER() OVER(PARTITION BY a.appName ORDER BY b.depName)
......
来回应你的评论。你可以这样做:
SELECT a.appName,RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
......
WITH CTE
AS
(
SELECT RANK() OVER(PARTITION BY appName ORDER BY depName) AS Rank
....
)
SELECT
*
FROM
CTE
WHERE
CTE.Rank<=10;
也许是这样的:
SELECT a.appName,RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
......
WITH CTE
AS
(
SELECT RANK() OVER(PARTITION BY appName ORDER BY depName) AS Rank
....
)
SELECT
*
FROM
CTE
WHERE
CTE.Rank<=10;
您也可以这样做:
SELECT a.appName,ROW_NUMBER() OVER(PARTITION BY a.appName ORDER BY b.depName)
......
来回应你的评论。你可以这样做:
SELECT a.appName,RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
......
WITH CTE
AS
(
SELECT RANK() OVER(PARTITION BY appName ORDER BY depName) AS Rank
....
)
SELECT
*
FROM
CTE
WHERE
CTE.Rank<=10;
请尝试以下查询:
SELECT a.appName,
RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
as RANK,
b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a
inner join tbl_users b on b.userName = a.userName
where a.date_time between '01-JUN-12' and '20-JUN-14' and a.appName like '%'
group by a.appName,b.depName order by a.appName;
编辑:获得前10名
SELECT * FROM
(
SELECT a.appName,
RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
as RANK,
b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a
inner join tbl_users b on b.userName = a.userName
where a.date_time between '01-JUN-12' and '20-JUN-14' and a.appName like '%'
group by a.appName,b.depName order by a.appName
) WHERE RANK <=10
order by appName;
请尝试以下查询:
SELECT a.appName,
RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
as RANK,
b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a
inner join tbl_users b on b.userName = a.userName
where a.date_time between '01-JUN-12' and '20-JUN-14' and a.appName like '%'
group by a.appName,b.depName order by a.appName;
编辑:获得前10名
SELECT * FROM
(
SELECT a.appName,
RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
as RANK,
b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a
inner join tbl_users b on b.userName = a.userName
where a.date_time between '01-JUN-12' and '20-JUN-14' and a.appName like '%'
group by a.appName,b.depName order by a.appName
) WHERE RANK <=10
order by appName;
请尝试以下查询:
SELECT a.appName,
RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
as RANK,
b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a
inner join tbl_users b on b.userName = a.userName
where a.date_time between '01-JUN-12' and '20-JUN-14' and a.appName like '%'
group by a.appName,b.depName order by a.appName;
编辑:获得前10名
SELECT * FROM
(
SELECT a.appName,
RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
as RANK,
b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a
inner join tbl_users b on b.userName = a.userName
where a.date_time between '01-JUN-12' and '20-JUN-14' and a.appName like '%'
group by a.appName,b.depName order by a.appName
) WHERE RANK <=10
order by appName;
请尝试以下查询:
SELECT a.appName,
RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
as RANK,
b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a
inner join tbl_users b on b.userName = a.userName
where a.date_time between '01-JUN-12' and '20-JUN-14' and a.appName like '%'
group by a.appName,b.depName order by a.appName;
编辑:获得前10名
SELECT * FROM
(
SELECT a.appName,
RANK() OVER (PARTITION BY a.appName ORDER BY b.depName)
as RANK,
b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a
inner join tbl_users b on b.userName = a.userName
where a.date_time between '01-JUN-12' and '20-JUN-14' and a.appName like '%'
group by a.appName,b.depName order by a.appName
) WHERE RANK <=10
order by appName;
你想用CTE方法获得前10名。 尝试仅对单个列a.appName进行分区 假设您使用分区两列方式
app1 dep1 =1st Statement Combination is 1
app1 dep2 =2nd Statement Combination is 1
app1 dep3 =3rd Statement Combination is 1
With CTE(A_Name,A_Rank,A_DepName,A_Visitor)
AS
(
SELECT a.appName,RANK() OVER (PARTITION BY a.appName ORDER BY a.appName)
as RANK,b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a
inner join tbl_users b on b.userName = a.userName
where a.date_time between '01-JUN-12' and '20-JUN-14' and a.appName like '%'
group by a.appName,b.depName order by a.appName
)
Select * from CTE where A_Rank <=10
你想用CTE方法获得前10名。 尝试仅对单个列a.appName进行分区 假设您使用分区两列方式
app1 dep1 =1st Statement Combination is 1
app1 dep2 =2nd Statement Combination is 1
app1 dep3 =3rd Statement Combination is 1
With CTE(A_Name,A_Rank,A_DepName,A_Visitor)
AS
(
SELECT a.appName,RANK() OVER (PARTITION BY a.appName ORDER BY a.appName)
as RANK,b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a
inner join tbl_users b on b.userName = a.userName
where a.date_time between '01-JUN-12' and '20-JUN-14' and a.appName like '%'
group by a.appName,b.depName order by a.appName
)
Select * from CTE where A_Rank <=10
你想用CTE方法获得前10名。 尝试仅对单个列a.appName进行分区 假设您使用分区两列方式
app1 dep1 =1st Statement Combination is 1
app1 dep2 =2nd Statement Combination is 1
app1 dep3 =3rd Statement Combination is 1
With CTE(A_Name,A_Rank,A_DepName,A_Visitor)
AS
(
SELECT a.appName,RANK() OVER (PARTITION BY a.appName ORDER BY a.appName)
as RANK,b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a
inner join tbl_users b on b.userName = a.userName
where a.date_time between '01-JUN-12' and '20-JUN-14' and a.appName like '%'
group by a.appName,b.depName order by a.appName
)
Select * from CTE where A_Rank <=10
你想用CTE方法获得前10名。 尝试仅对单个列a.appName进行分区 假设您使用分区两列方式
app1 dep1 =1st Statement Combination is 1
app1 dep2 =2nd Statement Combination is 1
app1 dep3 =3rd Statement Combination is 1
With CTE(A_Name,A_Rank,A_DepName,A_Visitor)
AS
(
SELECT a.appName,RANK() OVER (PARTITION BY a.appName ORDER BY a.appName)
as RANK,b.depName,Count(distinct a.userName) as visitors FROM tbl_app_webstats a
inner join tbl_users b on b.userName = a.userName
where a.date_time between '01-JUN-12' and '20-JUN-14' and a.appName like '%'
group by a.appName,b.depName order by a.appName
)
Select * from CTE where A_Rank <=10
感谢它的工作如果我想找出每个应用程序的排名前十的部门感谢它的工作如果我想找出每个应用程序的排名前十的部门感谢它的工作如果我想找出每个应用程序的排名前十的部门感谢它的工作如果我想找出每个应用程序的排名前十的部门怎么办app@Haider : 更新answer@Haider:更新answer@Haider:更新answer@Haider:更新答案