这是您的示例数据加载到名为campaign的表中:
CREATE TABLE campaign
(
campaign_id VARCHAR(10),
source_id VARCHAR(10),
clicked int,
viewed int
);
INSERT INTO campaign VALUES
('abc','xxx',0,0),
('abc','xxx',1,0),
('abc','xxx',1,1),
('abc','yyy',0,0),
('abc','yyy',1,0),
('abc','yyy',1,1),
('abc','yyy',0,0);
SELECT * FROM campaign;
这是它包含的内容。
mysql> DROP TABLE IF EXISTS campaign;
CREATE TABLE campaign
(
campaign_id VARCHAR(10),
source_id VARCHAR(10),
clicked int,
viewed int
);
INSERT INTO campaign VALUES
('abc','xxx',0,0),
('abc','xxx',1,0),
('abc','xxx',1,1),
('abc','yyy',0,0),
('abc','yyy',1,0),
('abc','yyy',1,1),
('abc','yyy',0,0);
SELECT * FROM campaign;
Query OK, 0 rows affected (0.03 sec)
mysql> CREATE TABLE campaign
-> (
-> campaign_id VARCHAR(10),
-> source_id VARCHAR(10),
-> clicked int,
-> viewed int
-> );
Query OK, 0 rows affected (0.08 sec)
mysql> INSERT INTO campaign VALUES
-> ('abc','xxx',0,0),
-> ('abc','xxx',1,0),
-> ('abc','xxx',1,1),
-> ('abc','yyy',0,0),
-> ('abc','yyy',1,0),
-> ('abc','yyy',1,1),
-> ('abc','yyy',0,0);
Query OK, 7 rows affected (0.07 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM campaign;
+
| campaign_id | source_id | clicked | viewed |
+
| abc | xxx | 0 | 0 |
| abc | xxx | 1 | 0 |
| abc | xxx | 1 | 1 |
| abc | yyy | 0 | 0 |
| abc | yyy | 1 | 0 |
| abc | yyy | 1 | 1 |
| abc | yyy | 0 | 0 |
+
7 rows in set (0.00 sec)
现在,这是一个很好的查询,您需要按广告系列+总计进行汇总和求和。
SELECT
campaign_id,
source_id,
count(source_id) total,
SUM(clicked) sum_clicked,
SUM(viewed) sum_viewed
FROM campaign
GROUP BY campaign_id,source_id
WITH ROLLUP;
以下是输出结果:
mysql> SELECT
-> campaign_id,
-> source_id,
-> count(source_id) total,
-> SUM(clicked) sum_clicked,
-> SUM(viewed) sum_viewed
-> FROM campaign
-> GROUP BY campaign_id,source_id
-> WITH ROLLUP;
+
| campaign_id | source_id | total | sum_clicked | sum_viewed |
+
| abc | xxx | 3 | 2 | 1 |
| abc | yyy | 4 | 2 | 1 |
| abc | NULL | 7 | 4 | 2 |
| NULL | NULL | 7 | 4 | 2 |
+
4 rows in set (0.00 sec)
现在使用 CONCAT 函数来美化它。
SELECT
CONCAT(
'Campaign ',campaign_id,
' Source ',source_id,
' > Total: ',
total,
' // Clicked: ',
sum_clicked
,' // Viewed: ',
sum_viewed) "Campaign Report"
FROM
(SELECT
campaign_id,
source_id,
count(source_id) total,
SUM(clicked) sum_clicked,
SUM(viewed) sum_viewed
FROM campaign
GROUP BY
campaign_id,source_id) A;
这是输出结果。
mysql> SELECT
-> CONCAT(
-> 'Campaign ',campaign_id,
-> ' Source ',source_id,
-> ' > Total: ',
-> total,
-> ' // Clicked: ',
-> sum_clicked
-> ,' // Viewed: ',
-> sum_viewed) "Campaign Report"
-> FROM
-> (SELECT
-> campaign_id,
-> source_id,
-> count(source_id) total,
-> SUM(clicked) sum_clicked,
-> SUM(viewed) sum_viewed
-> FROM campaign
-> GROUP BY
-> campaign_id,source_id) A;
+---------------------------------------------------------------+
| Campaign Report |
+---------------------------------------------------------------+
| Campaign abc Source xxx > Total: 3
| Campaign abc Source yyy > Total: 4
+---------------------------------------------------------------+
2 rows in set (0.00 sec)
试试看!