2017-02-25 39 views
0

我想选择具有最大取消行程数的列。我知道如何计算使用SQL语句的行程数,但是,当我尝试使用max函数时,它会给出无效的组函数错误。 我的SQL语句如下:enter image description hereSQL无效的组功能

select t.ServiceNumber, t.RouteNumber, remark, 
     max(count(if(Cancelled =1 ,1,null))) as"Total Cancelled Trip" 
from trip t inner join 
    route r 
    on r.ServiceNumber = t.ServiceNumber and 
     r.RouteNumber = t.RouteNumber 
group by t.ServiceNumber, t.RouteNumber,remark; 
+0

如果有很多最大值,我想显示所有列没有使用限制共享相同的最大值。可能吗? –

回答

0

如果你只想要一个行的最大,你可以这样做:

select t.ServiceNumber, t.RouteNumber, remark, 
     count(*) as "Total Cancelled Trip" 
from trip t inner join 
    route r 
    on r.ServiceNumber = t.ServiceNumber and 
     r.RouteNumber = t.RouteNumber 
where Cancelled = 1 
group by t.ServiceNumber, t.RouteNumber, remark 
order by count(*) desc 
limit 1; 

获取中关系的情况下,所有这样的行是棘手的在MySQL 。也许最简单的方法使用变量:

select tr.* 
from (select t.ServiceNumber, t.RouteNumber, remark, 
      count(*) as "Total Cancelled Trip", 
      (@maxtct = greatest(@maxtct, count(*)) 
     from trip t inner join 
      route r 
      on r.ServiceNumber = t.ServiceNumber and 
       r.RouteNumber = t.RouteNumber cross join 
      (select @maxtct := 0) params 
     where Cancelled = 1 
     group by t.ServiceNumber, t.RouteNumber, remark 
    ) tr 
where `Total Cancelled Trip` = @maxtct; 
+0

谢谢,但我还没有学会如何在我的课程中使用变量,因为我是初学者。是否有其他方式显示相同最大值的其他列? –