Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 根据目的统计每月的访客数量_Mysql_Count - Fatal编程技术网

Mysql 根据目的统计每月的访客数量

Mysql 根据目的统计每月的访客数量,mysql,count,Mysql,Count,大家好, 我有一张访客桌: ID | Date | Purpose 1 | 20/10/2016 | Purpose1 2 | 22/10/2016 | Purpose1 3 | 25/10/2016 | Purpose2 4 | 12/11/2016 | Purpose1 5 | 14/11/2016 | Purpose2 6 | 16/11/2016 | Purpose2 当前我正在使用此查询: select case when date like '%/10/20


大家好, 我有一张访客桌:

ID | Date | Purpose
1 | 20/10/2016 | Purpose1
2 | 22/10/2016 | Purpose1
3 | 25/10/2016 | Purpose2
4 | 12/11/2016 | Purpose1
5 | 14/11/2016 | Purpose2
6 | 16/11/2016 | Purpose2
当前我正在使用此查询:

select case
            when date like '%/10/2016' then '10/2016'
            when date like '%/11/2016' then '11/2016'
        end as month, count(*) as total 
        from visitors 
        where 
            date like '%/10/2016' 
            or date like '%/11/2016' 
        GROUP by month
我只能从上面的查询中得到月份和总列数。我如何实现这个输出

Month | Total | Purpose1 | Purpose2
10/2016 | 3 | 2 | 1
11/2016 | 3 | 1 | 2

谢谢

对表的转换不是很快。最好在一些小程序中这样做

如果你做了一个

select case
            when date like '%/10/2016' then '10/2016'
            when date like '%/11/2016' then '11/2016'
        end as month, count(*) as total, Purpose 
        from visitors 
        where 
            date like '%/10/2016' 
            or date like '%/11/2016' 
        GROUP by month, Purpose
你会有一个很好的起点。 您可能需要添加ORDERBY子句(取决于您的DBMS)


如果(且仅当)您的表中只有两个目的,并且表的大小不太大,则可以创建两个视图并将它们连接起来。

对表的转换不是很快。最好在一些小程序中这样做

如果你做了一个

select case
            when date like '%/10/2016' then '10/2016'
            when date like '%/11/2016' then '11/2016'
        end as month, count(*) as total, Purpose 
        from visitors 
        where 
            date like '%/10/2016' 
            or date like '%/11/2016' 
        GROUP by month, Purpose
你会有一个很好的起点。 您可能需要添加ORDERBY子句(取决于您的DBMS)


如果(且仅当)您的表中只有两个目的,并且表的大小不是很大,则可以创建两个视图并将它们连接起来。

考虑以下几点

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,Date DATE NOT NULL
,Purpose VARCHAR(12) NOT NULL
);

INSERT INTO my_table VALUES
(1,'2016-10-20','Purpose1'),
(2,'2016-10-22','Purpose1'),
(3,'2016-10-25','Purpose2'),
(4,'2016-11-12','Purpose1'),
(5,'2016-11-14','Purpose2'),
(6,'2016-11-16','Purpose2');

SELECT DATE_FORMAT(date,'%Y-%m') month
     , SUM(purpose = 'purpose1') purpose1
     , SUM(purpose = 'purpose2') purpose2
     , COUNT(*) total 
  FROM my_table 
 GROUP 
    BY month;
+---------+----------+----------+-------+
| month   | purpose1 | purpose2 | total |
+---------+----------+----------+-------+
| 2016-10 |        2 |        1 |     3 |
| 2016-11 |        1 |        2 |     3 |
+---------+----------+----------+-------+
…或者(在我看来,最好是您可以访问应用程序代码)


考虑以下几点

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,Date DATE NOT NULL
,Purpose VARCHAR(12) NOT NULL
);

INSERT INTO my_table VALUES
(1,'2016-10-20','Purpose1'),
(2,'2016-10-22','Purpose1'),
(3,'2016-10-25','Purpose2'),
(4,'2016-11-12','Purpose1'),
(5,'2016-11-14','Purpose2'),
(6,'2016-11-16','Purpose2');

SELECT DATE_FORMAT(date,'%Y-%m') month
     , SUM(purpose = 'purpose1') purpose1
     , SUM(purpose = 'purpose2') purpose2
     , COUNT(*) total 
  FROM my_table 
 GROUP 
    BY month;
+---------+----------+----------+-------+
| month   | purpose1 | purpose2 | total |
+---------+----------+----------+-------+
| 2016-10 |        2 |        1 |     3 |
| 2016-11 |        1 |        2 |     3 |
+---------+----------+----------+-------+
…或者(在我看来,最好是您可以访问应用程序代码)


提示:使用日期数据类型存储日期提示:使用日期数据类型存储日期转换表可能不快。不能使用索引的查询速度肯定很慢。没有讨论这个问题。但是如果你想转置这个表,并且恰好有50个目的,你将需要相当多的连接。这将使不能使用索引的惩罚增加50倍。谢谢你的回答,目前我只有三个目的在索引良好的环境中,大量的连接不应该是一个太大的问题。然而,出于不同的原因,我同意您的观点,即转换最好在应用程序代码中完成。转换表可能不会很快。不能使用索引的查询速度肯定很慢。没有讨论这个问题。但是如果你想转置这个表,并且恰好有50个目的,你将需要相当多的连接。这将使不能使用索引的惩罚增加50倍。谢谢你的回答,目前我只有三个目的在索引良好的环境中,大量的连接不应该是一个太大的问题。然而,出于不同的原因,我同意您的观点,即换位最好在应用程序代码中完成。