Mysql 如何优化SQL中的子查询?
我有一个数据集,列示例信息如下:Mysql 如何优化SQL中的子查询?,mysql,sql,Mysql,Sql,我有一个数据集,列示例信息如下: Date ID Cost 05/01 1001 30 05/01 1024 19 05/01 1001 29 05/02 1001 28 05/02 1002 19 05/02 1008 16 05/03 1017 89 05/04 1003 28 05/04 1001 16 05/05 1017 28 05/06 1002
Date ID Cost
05/01 1001 30
05/01 1024 19
05/01 1001 29
05/02 1001 28
05/02 1002 19
05/02 1008 16
05/03 1017 89
05/04 1003 28
05/04 1001 16
05/05 1017 28
05/06 1002 44
... etc...
我想创建一个表来显示每天排名前一位的付款人(成本最高),这意味着表中只有两列,输出示例应如下所示:
Date ID
05/01 1001
05/02 1001
05/03 1017
05/04 1003
...etc...
我知道这个问题很简单,我的问题是我想简化查询
我的问题是:
select Date, ID
from (select Date, ID, max(SumCost)
from (select Date, ID, sum(cost) as SumCost
from table1
group by Date, ID) a
group by Date, ID) b;
这似乎有点愚蠢,我想优化查询。关键是我只想输出日期和Id,这两列
有什么建议吗?如果我们在玩家在同一天有多个费用的情况下取一个最大费用,那么这个查询将起作用。您上面写的查询不正确
Select date, ID
from
(
Select Date, ID, row_number() over(partition by date order by cost desc) as rnk
from table
) a
where rnk = 1
下面是一个使用相关子查询的方法:
select t.*
from t
where t.cost = (select max(t2.cost) from t t2 where t2.date = t.date);
你的查询不正确。一个玩家在同一天可以有多个费用吗?如果是的话,我们应该把成本加起来还是只取最大值?你的疑问毫无意义。你到底期望什么?根据您的查询,
选择不同的日期,表1中的ID
就足够了。为什么要添加max(SumCost),原因是什么,因为已经分组按sum(cost)@Raunak Thomas付款人可以在同一天有多个成本,所以,这就是为什么我需要先汇总,然后使用max函数选择每天花费最多的人@DineshDB付款人可以在同一天有多个成本,所以,这就是为什么我需要先汇总,然后使用max函数选择每天花费最多的人没有行号()MySQL中的功能。@Gordon Lincoff感谢您的指导。然而,根据数据,一个付款人在同一天有多次付款。因此,为了选择每天支付最多的人,我们需要先求和,然后使用max函数。另一件事是,我只需要输出两列,即Date和ID,付款金额不允许显示在表中。在这种情况下,我们必须执行3个子查询。那么,我们如何优化查询?@Marcus。您的数据没有两个ID在同一天的示例。@Gordon Lincoff感谢您的提醒。我刚刚编辑了我的样本。那么,我们如何针对这种情况优化查询呢?