2014-01-16 60 views
2

我有一個select語句的問題,作爲一個小的幫助這裏是重要的列:PHP/MySQL的語句,以便選擇最大總和的加入


Table1    
ID NAME   

TABLE 2 
ID U_ID COUNTER 

表1匹配的ID表2的U_ID。表2包含相同u_id的許多條目。

我想要做的是獲得「用戶」(表1)誰的總和最大的名稱。計數器。

從現在開始,我得到的是表的連接(Where子句取決於其他行對於問題不重要)。

任何人都可以幫我解決這個問題嗎?

+0

沿着SELECT SELECT Table1.ID,SUM(Table2.counter)FROM TABLE1的東西LEFT JOIN Table2 ON Table1.ID = Table2.U_ID ORDER BY SUM(Table2.counter)LIMIT 1'? –

+0

WHERE中的其他行對於這個問題有些重要。如果您沒有在您將有INNER JOIN的地方的Table2字段上進行空檢查。 – aconrad

回答

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

2

所以,你需要的是一種聚合(列之和的最大值)的集合。最簡單的是創建一個視圖提供之和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。 最後,我會說:把我的解決方案看作是教育性的,其他的是實用的