2

我的 sql 看起来像:


create table ad(
  ad_id int,
  ad_name varchar(10)
);


insert into ad(ad_id, ad_name) values
  (1,'ad1'),
  (2,'ad2'),
  (3,'ad3');
 
 
 create table ad_insight(
   id int,
   ad_id int,
   date date, 
   clicks int
 );


insert into ad_insight(id, ad_id, date, clicks) values
    (1, 1, '2021-04-25', 1),
    (2, 1, '2021-04-24', 4),
    (3, 1, '2021-04-23', 2),
    (4, 2, '2021-04-25', 6),
    (5, 2, '2021-03-03', 7);


create table product(
    product_id int,
    ad_id int,
    product_name varchar(10)
);

insert into product(product_id, ad_id, product_name) values
    (1, 1, 'prod1'),
    (2, 1, 'prod2'),
    (3, 2, 'prod3'),
    (4, 2, 'prod4');
    (1, 3, 'prod1');
    
create table product_insight(
    id int,
    product_id int, 
    sale int, 
    date date
);
insert into product_insight(id, product_id, sale, date) values
    (1, 1, 12, '2021-04-25'),
    (2, 1, 11, '2021-04-24'),
    (3, 1, 13, '2021-04-23'),
    (4, 1, 14, '2021-04-22'),
    (5, 1, 17, '2021-04-21'),
    (6, 1, 15, '2021-04-20'),
    (7, 1, 13, '2021-04-19'),
    (8, 2, 19, '2021-04-25');

在这里你有小提琴

架构的快速解释:我有广告:

  1. 每个广告都有洞察力,这些洞察力告诉我们某个广告何时有效。
  2. 每个广告都有产品。每个产品都有 product_insight,它告诉我们该产品在某一天产生了多少销售额。

现在我想获得以下表格:

  1. 这将汇总ad_insight表中的点击次数并将 product_sale 从product_insightin汇总2021-04-232021-04-25inclusive。
+----------+--------+--------------+--------------+
| ad_name  | clicks | product_sale |   products   |
+----------+--------+--------------+--------------+
| ad1      |      7 |           55 | prod1, prod2 |
| ad2      |      6 |            0 | prod3, prod4 |
| ad3      |      0 |           36 | prod1        |
+----------+--------+--------------+--------------+
  1. 汇总上表中所有内容的汇总行:
+------------+--------------+--------------------+----------------------------+
| total_ads  | total_clicks | total_product_sale |    unique_all_products     |
+------------+--------------+--------------------+----------------------------+
|          3 |            13|                 91 | prod1, prod2, prod3, prod4 |
+------------+--------------+--------------------+----------------------------+

我试过什么?

# 1) table
select ad_name, SUM(ad_insight.clicks) as clicks 
from ad 
left join ad_insight on ad.ad_id = ad_insight.ad_id 
where ad_insight.date >= '2021-04-23' and ad_insight.date <= '2021-04-25'
group by ad.ad_id;

# 2) table
select count(distinct ad_insight.ad_id) as total,  SUM(ad_insight.clicks) as clicks
from ad_insight
left join ad on ad.ad_id = ad_insight.ad_id
where ad_insight.date >= '2021-04-23' and ad_insight.date <= '2021-04-25'

但是不知道怎么选择product_sale表和products用逗号隔开!

4

1 回答 1

0

如果我理解正确,您希望针对每个广告沿两个不同的维度(点击次数和销售额)进行汇总。加入前聚合:

select ad.ad_name, ai.clicks, p.sales, p.products
from ad left join
     (select ai.ad_id, sum(ai.clicks) as clicks
      from ad_insight ai
      where ai.date >= '2021-04-23' and ai.date <= '2021-04-25'
      group by ai.ad_id
     ) ai
     on ad.ad_id = ai.ad_id left join
     (select p.ad_id, sum(pi.sale) as sales,
             group_concat(distinct p.product_name) as products
      from product p join
           product_insight pi
           on pi.product_id = p.product_id 
      where pi.date >= '2021-04-23' and pi.date <= '2021-04-25'
      group by p.ad_id
     ) p
     on p.ad_id = ad.ad_id ;

第二个查询只是再次聚合它。

于 2021-04-25T11:28:15.433 回答