簡體   English   中英

使用分組依據僅顯示最高匯總結果

[英]Display only top sum-up results using group by

我的表格為同一組用戶記錄了三個不同的分數(地點,公園,分區)。 用戶的總得分是“所有站點得分之和” +“所有公園得分之和” +“所有部門得分之和”。

代碼如下,我正在使用MySQL:

select  sum(points)as points, user_name 
from 
(SELECT sum(site_point) as points, user_name from visits v join users u on 
u.user_id = v.user_id group by user_name
union 
select sum(park_point) as points , user_name  from visits v join users u on                 
u.user_id = v.user_id group by user_name
union
select sum(division_point) as points , user_name  from visits v join users u 
on u.user_id = v.user_id  group by user_name
) V group by user_name  order by sum(points) DESC ;

我只想顯示得分在前5名的用戶及其得分。 十個用戶可能具有相同的最高分數。 我需要顯示所有這些。 感謝您的幫助。

我認為這是您想要的:

select user_name,
       sum(site_point + park_point + division_point) as points
from visits v join
     users u
     on u.user_id = v.user_id
group by user_name
order by points desc
limit 5;

單一聚合可簡化計算。

您可能沒有意識到,但是在某些情況下union返回不正確的結果。 Union刪除重復項,因此,如果用戶的部分分數相同,則兩行將變為一。

編輯:

獲得前5名的分數有點棘手,但可能的是:

select user_name,
       sum(site_point + park_point + division_point) as points
from visits v join
     users u
     on u.user_id = v.user_id
group by user_name
having points >= (select distinct points
                  from (select sum(site_point + park_point + division_point)
                        from visits v join
                             users u
                             on u.user_id = v.user_id
                        group by user_name
                       ) vu
                  order by points desc
                  limit 1 offset 4
                 )
order by points desc
limit 5;

假設user_name對於給定的ID是唯一的,則可以簡化一下:

having points >= (select distinct points
                  from (select sum(site_point + park_point + division_point) as points
                        from visits v 
                        group by user_id
                       ) vu
                  order by points desc
                  limit 1 offset 4
                 )

而且,如果您希望與前5名用戶匹配的任何人(如果有聯系,則返回多於5行),則可以更改select distinct以在子查詢中進行select

使用LIMIT命令。 更多信息在這里

因此,將其附加到您的SQL上將導致:

select  sum(points)as points, user_name 
from 
(SELECT sum(site_point) as points, user_name from visits v join users u on 
u.user_id = v.user_id group by user_name
union 
select sum(park_point) as points , user_name  from visits v join users u on                 
u.user_id = v.user_id group by user_name
union
select sum(division_point) as points , user_name  from visits v join users u 
on u.user_id = v.user_id  group by user_name
) V group by user_name  order by sum(points) DESC LIMIT 5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM