1

My sql looks like:

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,
    product_name varchar(10)
);

insert into product(product_id, product_name) values
    (1,'prod1'),
    (2,'prod2'),
    (3,'prod3'),
    (4,'prod4'),
    (5,'prod5');
    
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');
                                    

create table ads_products(
    ad_id int,
    product_id int
);
insert into ads_products (ad_id, product_id) values 
    (1, 1),
    (1, 2),
    (2, 3),
    (2, 4),
    (1, 3);

Here you have fiddle

A quick explanation of schema: I have ads:

  1. each ad has insights, which tell us when a certain ad was active.
  2. each ad has products(many2many - ads_products table). Each product has product_insight which tells us how many sales that product generated on a certain day.

And now I want to get the following table which will sum up clicks from ad_insight table and sum up product_sale from product_insight in 2021-04-23 to 2021-04-25 inclusive.

+----------+--------+--------------+--------------+
| ad_name  | clicks | product_sale |   products   |
+----------+--------+--------------+--------------+
| ad1      |      7 |           55 | prod1, prod2 |
| ad2      |      6 |            0 | prod3, prod4 |
| ad3      |      0 |           36 | prod1        |
+----------+--------+--------------+--------------+

What I have tried?

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;

But I do not know how to select product_sale table and products separated by a comma?

miclofa
  • 49
  • 1
  • 10
  • Mysql :) I thought it was the same – miclofa Apr 26 '21 at 17:55
  • FYI, it's a bad habit to include columns in the `SELECT` that aren't aggregated and aren't in the `GROUP BY`. In most RDBMS the query would fail. – Thom A Apr 26 '21 at 17:57
  • *"I thought it was the same"* A quick read of the tags would have told you that they are not. Both tell you to "NOT USE" the tag injunction with the other. – Thom A Apr 26 '21 at 17:58
  • @Larnu so do u have idea for the answer? – miclofa Apr 26 '21 at 17:59
  • It was your tag [tag:sql-server] that brought me, however, both SQL Server and MySQL have a function to aggregate strings. Does this answer your question? [MySQL Results as comma separated list](https://stackoverflow.com/questions/662207/mysql-results-as-comma-separated-list) – Thom A Apr 26 '21 at 18:01
  • No :(, I still do not know how to sum sales – miclofa Apr 26 '21 at 18:06
  • @Larnu why it is a bad habit to include columns in the SELECT that aren't aggregated and aren't in the GROUP BY ? – miclofa Apr 27 '21 at 05:29
  • 1
    I tell you *in* that very comment, @x123chriss... – Thom A Apr 27 '21 at 08:05
  • Does this answer your question? [Advanced sum aggregate fields](https://stackoverflow.com/questions/67306989/advanced-sum-aggregate-fields) – AD7six May 06 '21 at 17:34

0 Answers0