SQL显示信息的最大值(计数(*)

SQL显示信息的最大值(计数(*),sql,postgresql,max,greatest-n-per-group,Sql,Postgresql,Max,Greatest N Per Group,目前为止,此查询显示max(hella) 我想显示max(hella)条目的名字和姓氏 WITH CTE as ( SELECT G.firstname, G.lastname, count(*) as hella FROM guest G, Timeslot TS, shows H where G.timeslotnum = TS.timeslotnum AND TS.shownumber = H.shownumber AND H.showname = 'Fitness' Group by

目前为止,此查询显示max(hella)

我想显示max(hella)条目的名字和姓氏

WITH CTE as
(
SELECT G.firstname, G.lastname, count(*)  as hella
FROM guest G, Timeslot TS, shows H
where G.timeslotnum = TS.timeslotnum
AND TS.shownumber = H.shownumber
AND H.showname = 'Fitness'
Group by g.firstname, G.lastname
)
SELECT firstname, lastname, hella
FROM CTE A
WHERE hella= (SELECT MAX(HELLA) FROM CTE B
WHERE A.firstname=B.firstname
and A.lastname=B.lastname)
As blabla

我不能百分之百肯定我理解你的问题,但假设你正在寻找记录最多的人的名字和姓氏,类似这样的方法应该可以:

with cte as (
  select g.firstname, g.lastname, count(*) cnt
  from guest g
      join timeslot ts on g.timeslotnum = ts.timeslotnum
      join shows s on ts.shownumber = s.shownumber and s.showname = 'Fitness'
  group by g.firstname, g.lastname
)
select firstname, lastname
from cte
where cnt = (select max(cnt) from cte);

虽然SoulTrain和sgeddes从一个角度给出了答案,但如果您希望只显示一条具有最大计数的记录,您可以简单地编写如下内容:

SELECT G.firstname, G.lastname, count(*) as hella
FROM 
    guest G,
    Timeslot TS, 
    shows H
where 
    G.timeslotnum = TS.timeslotnum
    AND TS.shownumber = H.shownumber
    AND H.showname = 'Fitness'
Group by 
    g.firstname, 
    G.lastname
ORDER by 
    hella desc
fetch first 1 rows only

这与@maniek或@zfus已经发布的内容非常相似:如果存在联系,则返回一行任意选择。 但是使用正确的连接语法,使用一些语法,使用较短的连接语法:

SELECT g.firstname, g.lastname, count(*) AS hella
FROM   guest    g
JOIN   timeslot t USING (timeslotnum)
JOIN   shows    s USING (shownumber)
WHERE  s.showname = 'Fitness'
GROUP  BY 1,2
ORDER  BY 3 DESC
LIMIT  1;

(重复使用@sgedes'fiddle)。

您想要最大限度地使用所有领带,还是只使用一条(任意)?谢谢!如果我理解正确,我们按降序排序,然后取第一个条目,逻辑上是最大值,对吗?是的,你得到了@user3241846。使用
limit 1
fetch first 1 rows only
的某些答案的危险在于,如果John Smith和Max Taylor的计数都是45(这是最大计数),则只会显示一个。感谢您的帮助!
SELECT G.firstname, G.lastname, count(*) as hella
FROM 
    guest G,
    Timeslot TS, 
    shows H
where 
    G.timeslotnum = TS.timeslotnum
    AND TS.shownumber = H.shownumber
    AND H.showname = 'Fitness'
Group by 
    g.firstname, 
    G.lastname
ORDER by 
    hella desc
fetch first 1 rows only
SELECT g.firstname, g.lastname, count(*) AS hella
FROM   guest    g
JOIN   timeslot t USING (timeslotnum)
JOIN   shows    s USING (shownumber)
WHERE  s.showname = 'Fitness'
GROUP  BY 1,2
ORDER  BY 3 DESC
LIMIT  1;