SQL显示信息的最大值(计数(*)
目前为止,此查询显示max(hella) 我想显示max(hella)条目的名字和姓氏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
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);
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;