我有一個select語句的問題,作爲一個小的幫助這裏是重要的列:PHP/MySQL的語句,以便選擇最大總和的加入
Table1
ID NAME
TABLE 2
ID U_ID COUNTER
表1匹配的ID表2的U_ID。表2包含相同u_id的許多條目。
我想要做的是獲得「用戶」(表1)誰的總和最大的名稱。計數器。
從現在開始,我得到的是表的連接(Where子句取決於其他行對於問題不重要)。
任何人都可以幫我解決這個問題嗎?
我有一個select語句的問題,作爲一個小的幫助這裏是重要的列:PHP/MySQL的語句,以便選擇最大總和的加入
Table1
ID NAME
TABLE 2
ID U_ID COUNTER
表1匹配的ID表2的U_ID。表2包含相同u_id的許多條目。
我想要做的是獲得「用戶」(表1)誰的總和最大的名稱。計數器。
從現在開始,我得到的是表的連接(Where子句取決於其他行對於問題不重要)。
任何人都可以幫我解決這個問題嗎?
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
你可以試試這個:
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
所以,你需要的是一種聚合(列之和的最大值)的集合。最簡單的是創建一個視圖提供之和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。 最後,我會說:把我的解決方案看作是教育性的,其他的是實用的
沿着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'? –
WHERE中的其他行對於這個問題有些重要。如果您沒有在您將有INNER JOIN的地方的Table2字段上進行空檢查。 – aconrad