0

我的查询要求我按人数找到最繁忙的位置(附模式)追踪

select DISTINCT location.name as 'Location', f_name|| ' ' || l_name as 'Citizen'
from CheckIn
join location on checkin.LocID = Location.LocID
join  person on person.PersonID = CheckIn.PersonID

有了上面的查询。我可以找到访问过这些地点的人,但我找不到访问过某个地点的人数最多的人,因为他们都是单独显示的。我知道我需要添加计数或分组依据。

如果我尝试按以下方式进行计数

select DISTINCT location.name as 'Location', f_name|| ' ' || l_name as 'Citizen', count (personid)
from CheckIn
join location on checkin.LocID = Location.LocID
join  person on person.PersonID = CheckIn.PersonID

它会向我显示模棱两可的列。我知道这是因为我已将其用作连接,但是如果我不能重用它,我该如何计算人数?

如何修复此代码以按人数显示最繁忙的位置?

4

2 回答 2

0

这个查询:

SELECT LID, COUNT(*) 
FROM CheckIn
GROUP BY LID

返回每个访问的人数LID
您还可以使用窗口函数RANK()按人数对每个位置进行排名:

SELECT LID, RANK() OVER (ORDER BY COUNT(*) DESC) rnk 
FROM CheckIn
GROUP BY LID

最后,您将此查询与运算符一起使用IN以返回排名第一的位置的详细信息:

SELECT * FROM Location 
WHERE LocationID IN (
  SELECT LID
  FROM (
    SELECT LID, RANK() OVER (ORDER BY COUNT(*) DESC) rnk 
    FROM CheckIn
    GROUP BY LID
  )
  WHERE rnk = 1
)
于 2020-08-17T09:18:25.327 回答
0

你可以试试下面:

select 
  name, COUNT(P.PersonID) as People_Count
from Location AS L
inner join checkin as C on C.LocID = L.LocID
inner join  person as P on P.PersonID = C.PersonID
group by name
order by COUNT(P.PersonID) desc
于 2020-08-18T06:58:04.357 回答