Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何优化SQL中的子查询?_Mysql_Sql - Fatal编程技术网

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感谢您的提醒。我刚刚编辑了我的样本。那么,我们如何针对这种情况优化查询呢?