PHP / MYSQL语句因此选择Max Sum of Join

时间:2014-01-16 07:34:16

标签: php mysql sql select

我遇到了一个select语句的问题,这里有一些重要的帮助:


Table1            
ID NAME           

TABLE 2  
ID U_ID COUNTER

表1的ID与表2的U_ID匹配。表2包含相同u_id的许多条目。

我想要做的是获得总和最大的“用户”(表1)的名称。计数器。

我从现在开始得到的是表的连接(Where子句取决于对问题不重要的其他行。)

任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

所以你需要的是一个聚合的集合(列的最大值)。最简单的方法是创建一个提供sum和u_id结束的视图,然后选择它的最大值:

create view table2sums
as
select u_id, sum(counter) as total
  from table2
 group by u_id;

然后

select t1.name
  from table1 t1, table2sums t2
 where t1.id = t2.u_id
   and t2.total >= all (
           select total
             from table2sums
       )

在这种特殊情况下,您也可以直接进行:

select t1.name
  from table1 t1, table2 t2
 where t1.id = t2.u_id
 group by t1.name
having sum(t2.counter) >= all (
           select sum(counter)
             from table2
            group by t2.u_id
        )

注意:其他提议的解决方案将显示更好的性能。我的解决方案只选择名称(这是你所说的你想要的)并且可以在任何RDBMS中使用。 存在没有LIMIT可能性的RDBMS。 最后,我要说:把我的解决方案看作是教育性的,其他的则是实用的

答案 1 :(得分:1)

SELECT name,
      SUM(counter) as counter
FROM table1
JOIN table2
ON table1.id = table2.u_id
GROUP BY u_id
ORDER BY counter DESC 
LIMIT 1 

答案 2 :(得分:0)

你可以试试这个:

SELECT name, SUM(counter) as total_counter
FROM table1
JOIN table2
ON table1.id = table2.u_id
GROUP BY u_id
ORDER BY total_counter DESC 
LIMIT 1

工作演示:http://sqlfiddle.com/#!2/45419/4