首页 > 解决方案 > 相关子查询 MySQL

问题描述

显然我不明白相关子查询是如何在幕后工作的。

我有以下“销售”表架构:sale_id|sale_date|product_type

我的目标是计算某种类型的已售产品与该日期售出的产品总数的比率。

例如:

1. 2015-01-03 product_1
2. 2015-01-03 product_1
3. 2015-01-03 product_3
4. 2015-01-04 product_4
5. 2015-01-05 product_1

我对 product_1 的输出应该是:

2015-01-03 0.667
2015-01-04 0
2015-01-05 1

这是我的代码想法(我们从外部查询 s1 中一一接收单个 sale_date 并在内部查询中使用它执行选择查询)。显然这不起作用:


select distinct s1.sale_date, count(select * from sales s2
                                    where s2.sale_date = s1.sale_date
                                    and s2.product_type = 'product1')/
                              count(select * from sales s3
                                    where s3.sale_date = s1.sale_date)
from sales s1

请帮我解决这个问题!

标签: mysqlsqlcountsubqueryaggregate-functions

解决方案


您要编写的查询具有子查询的计数:

select distinct s1.sale_date
    (select count(*) from sales s2 where s2.sale_date = s1.sale_date and s2.product_type = 'product1')
    / (select count(*) from sales s2 where s2.sale_date = s1.sale_date) as ratio
from sales s1

但是,这确实是低效的。您要求使用条件聚合完成的操作要简单得多,如下所示:

select sale_date, avg(product_type = 'product1') as ratio
from sales
group by sale_date

这将数据分组sale_date; 当产品类型匹配时product_type = 'product1'进行评估,否则。您可以在每个组中平均该值以获得该产品的每日比率。10


推荐阅读