我想从一系列返回值中取最大值,但我想不出一个简单的方法。我的查询返回所有行,所以1/2的方式。我可以用php过滤,但我想用sql来完成。我试过了 max
但仍返回所有结果的子查询。
ddl地址:
create table matrix(
count int(4),
date date,
product int(4)
);
create table products(
id int(4),
section int(4)
);
dml公司:
select max(magic_count), section, id
from (
select sum(count) as magic_count, p.section, p.id
from matrix as m
join products as p on m.product = p.id
group by m.product
) as faketable
group by id, section
演示我目前的尝试。
仅ID 1
以及 3
应该从样本数据返回,因为它们具有最高的累积 count
对于每个 section
s。
下面是第二个sql fiddle,它演示了相同的问题。
2条答案
按热度按时间z6psavjg1#
这里有一个不用的解决方案
JOIN
s、 它比另一个答案有更好的性能,后者使用了大量的数据JOIN
学生:开头的变量用于模拟窗口函数(
LAG
以及ROW_NUMBER
),在MySQL8.0或更高版本中可用(如果您使用这样的版本,请让我知道,因此我将为您提供带有窗口函数的解决方案)。演示
另一个演示,您可以在其中比较我的查询和其他查询的性能。它包含约2万行,我的查询速度快了近2倍。
pcrecxhr2#
干得好:
请参阅手动输入中的简化示例(和其他方法),以获取包含某列的按组最大值的行
看它在这里工作