我遇到了一个select语句的问题,这里有一些重要的帮助:
Table1
ID NAME
TABLE 2
ID U_ID COUNTER
表1的ID与表2的U_ID匹配。表2包含相同u_id的许多条目。
我想要做的是获得总和最大的“用户”(表1)的名称。计数器。
我从现在开始得到的是表的连接(Where子句取决于对问题不重要的其他行。)
任何人都可以帮我解决这个问题吗?
答案 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