mysql - 获取不同位置的访问计数

标签 mysql subquery

访问 mysql表:

+---------+-------------+------------+--------+---------------------+
| visitId | visitSiteId | homeSiteId | userId |       time          |
+---------+-------------+------------+--------+---------------------+
|   1     |      1      |     1      |  1001  | 2013-09-01 11:50:12 |
|   2     |      1      |     1      |  1001  | 2013-09-03 12:50:12 |
|   3     |      2      |     1      |  1001  | 2013-09-04 13:50:12 |
|   4     |      2      |     1      |  1001  | 2013-09-07 11:00:00 |
|   5     |      2      |     1      |  1001  | 2013-09-09 12:32:12 |
|   6     |      2      |     1      |  1001  | 2013-09-13 15:48:12 |
|   7     |      2      |     2      |  1002  | 2013-09-01 11:00:12 |
|   8     |      2      |     2      |  1002  | 2013-09-02 12:50:12 |
|   9     |      2      |     2      |  1002  | 2013-09-05 13:50:12 |
|   10    |      1      |     2      |  1002  | 2013-09-06 11:50:12 |
|   11    |      1      |     2      |  1002  | 2013-09-07 12:50:12 |
|   12    |      2      |     2      |  1002  | 2013-09-15 13:50:12 |
+---------+-------------+------------+--------+---------------------+

记录访问日期时间、访问的网站和用户主页

我想找到如何从上面的数据输出 3 个报告。

  1. 返回非主网站访问次数 >= 主网站访问次数的所有用户;任意日期
  2. 返回非家庭网站访问次数 >= 输入的最小整数的所有用户,例如非家庭计数 >= 10
  3. 1 和 2 均包含日期范围,即时间 >= '2013-09-01 11:50:12' AND 时间 <= '2013-09-13 15:48:12'

我对 MySQL 很陌生,并且在子查询语法方面遇到困难,因此希望得到任何帮助: 下面的查询将返回家庭访问和非家庭访问的计数,但我无法理解子查询的组合结果

SELECT COUNT(v.user_id), v.user_id FROM visit v WHERE v.Site <> v.HomeSite GROUP BY v.user_id;
SELECT COUNT(v.user_id), v.user_id FROM visit v WHERE v.Site = v.HomeSite GROUP BY v.user_id;
SELECT COUNT(v.user_id), v.user_id FROM visit v WHERE v.Site <> v.HomeSite AND v.Time >= '2013-09-01 11:50:12' AND v.Time <= '2013-09-13 15:48:12' GROUP BY v.user_id;
SELECT COUNT(v.user_id), v.user_id FROM visit v WHERE v.Site = v.HomeSite AND v.Time >= '2013-09-01 11:50:12' AND v.Time <= '2013-09-13 15:48:12' GROUP BY v.user_id;

这里是MySQL创建表和插入数据以协助测试:

 CREATE TABLE `dbName`.`visit`(`visitId` INT(11) NOT NULL AUTO_INCREMENT, `visitSiteId` INT(11), `homeSiteId` INT(11), `userId` INT(11), `time` DATETIME, PRIMARY KEY (`visitId`));

INSERT INTO `dbName`.`visit`(`visitSiteId`,`homeSiteId`,`userId`,`time`) VALUES
  (1,1,1001,'2013-09-01 11:50:12'),
  (1,1,1001,'2013-09-03 12:50:12'),
  (2,1,1001,'2013-09-04 13:50:12'),
  (2,1,1001,'2013-09-07 11:00:00'),
  (2,1,1001,'2013-09-09 12:32:12'),
  (2,1,1001,'2013-09-13 15:48:12'),
  (2,1,1002,'2013-09-01 11:00:12'),
  (2,1,1002,'2013-09-02 12:50:12'),
  (2,1,1002,'2013-09-05 13:50:12'),
  (1,1,1002,'2013-09-06 11:50:12'),
  (1,1,1002,'2013-09-07 12:50:12'),
  (2,1,1002,'2013-09-15 13:50:12');

最佳答案

未经尝试和测试..

SELECT Count(visitId) AS Visits, userId 
    FROM homeSiteId 
    GROUP BY visitId HAVING Count(visitId) > 2999

关于mysql - 获取不同位置的访问计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19107369/

相关文章:

Mysql远程连接

mysql - 如何在 SQL 子查询中返回多个结果?

跨 2 个数据库的 PostgreSQL 连接

mysql - 在子查询中使用查询中的逗号分隔字符串

php - 使用 GROUP BY、HAVING、COUNT、ORDER BY 和 2 个表更快地编写此 MySQL 查询的方法

javascript - 如何使用 Fuse.js 和 Redis 在 MySQL 表中进行全文搜索?

mysql - 如何替换MySQL中的非数字字符?

Mysql 从另一个表插入并统计记录数

MySQL - 可以利用 order by desc limit 1 来优化 3 个子查询的查询来重试最新记录吗?

mysql - MariaDB 列存储 : Filtering SubQuery by Computed Value