2014-03-29 42 views
1

该查询目前显示MAX(海拉)到目前为止SQL显示信息

SELECT max(hella) 
FROM (
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 
) 
As blabla 

我想展示最大的名字和姓氏(海拉)项

+0

你想要所有的关系为最大,或只有一个(任意)? –

回答

1

这很像@maniek或@zfus已发布的内容:返回单行,如果有关系,则返回任意选择。 但适当的JOIN语法和更短一些语法糖:

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; 

SQL Fiddle(重用@sgeddes'小提琴)。

+0

谢谢!如果我正确地理解了这一点,我们按照降序排列,然后采用第一个逻辑上是最大的条目,我正确吗? – user3241846

+1

是的,你知道了@ user3241846。如果约翰史密斯和马克斯泰勒的计数都是45(这是最大计数),那么使用限制1或只提取第一行的答案的一些答案的危险是,只有一个会显示出来。 – zedfoxus

0

试试这个...

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 
0

我不是100%肯定我明白你的问题,但假设你正在寻找最记录计数的人的姓和名,这样的事情应该工作:

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); 
+1

最佳答案,假设OP想要潜在的关系...另外更喜欢加入语法... – user2480596

1
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 
limit 1 
1

虽然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 

Example in SQLFiddle

+0

感谢您的帮助! – user3241846

+0

非常欢迎您! – zedfoxus