Php MYSQL选择查询和SUM()
我有下表:Php MYSQL选择查询和SUM(),php,mysql,sql,Php,Mysql,Sql,我有下表: | campaign_id | source_id | clicked | viewed | ---------------------------------------------- | abc | xxx | 0 | 0 | | abc | xxx | 1 | 0 | | abc | xxx | 1 | 1 | | abc
| 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 |
我需要以下输出:
xxx > Total: 3 // Clicked: 2 // Viewed 1
yyy > Total: 4 // Clicked: 2 // Viewed 1
我知道我必须在查询中使用某种SUM(),但我不知道如何区分源代码中的多个唯一值(比如foreach、idk)
如何仅使用一个查询就可以获得显示所有唯一源ID的统计信息的输出?试试以下方法:
SELECT source_id, (SUM(clicked)+SUM(viewed)) AS Total
FROM your_table
GROUP BY source_id
以下是加载到名为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 // Clicked: 2 // Viewed: 1 |
| Campaign abc Source yyy > Total: 4 // Clicked: 2 // Viewed: 1 |
+---------------------------------------------------------------+
2 rows in set (0.00 sec)
试试看 我不应该按源id分组吗?否则谢谢,我会试试这个!您应该
按源Id分组。我还认为他想选择源代码,SUM(点击)+SUM(查看)作为Total
@DonCroce:是的,只是一个打字错误。编辑我的帖子:)我真的很希望有人对为什么投反对票。这是改进问题的唯一方法。
SELECT source_id, SUM(clicked + viewed) AS 'Total'
FROM your_table
GROUP BY source_id