mysql - 如何在 MySQL 中对具有多个 HAVING 值的多个列进行 GROUP BY?

标签 mysql group-by count having

我正在尝试创建一个 mysql 查询来查看存储搜索查询的表。该查询试图获取符合以下条件的所有行:

  • >=到某个日期
  • 仅返回搜索查询出现 3 次或以上的行
  • 也仅返回 2 个或更多用户使用过搜索查询的行

此查询不起作用,但应概述我正在尝试执行的操作:

SELECT 
  * 
FROM 
  `analytics` 
WHERE 
  `date` >= '2021-01-01' 
GROUP BY 
  `query` 
HAVING 
  COUNT(*) >= 3 
  AND 
GROUP BY 
  `user` 
HAVING 
  COUNT(*) >= 2 
ORDER BY 
  id DESC;

示例数据

<表类=“s-表”> <标题> id 用户 查询 日期 <正文> 1 5 什么是狗 2021-01-01 2 5 什么是狗 2021-01-01 3 6 什么是狗 2021-01-01 4 7 什么是狗 2021-01-01 5 7 什么是兄弟 2021-01-01

示例 SQL

SELECT 
  * 
FROM 
  analytics 
WHERE 
  date >= '2021-01-01' 
GROUP BY 
  query 
HAVING 
  COUNT(*) >= 3 
  AND 
GROUP BY 
  user 
HAVING 
  COUNT(*) >= 2 
ORDER BY 
  id DESC;

使用上面查询中设置的值,应返回查询“What is a dogs”的单行,所有其他列并不重要。

我知道您可以将单独的列用逗号分隔为 GROUP BY,但我似乎无法弄清楚如何为每列设置不同的值。

最佳答案

您可以在同一个 HAVING 子句中设置这两个条件:

SELECT `query` 
FROM `analytics` 
WHERE `date` >= '2021-01-01' 
GROUP BY `query`
HAVING COUNT(*) >= 3 AND COUNT(DISTINCT `user`) >= 2;

关于mysql - 如何在 MySQL 中对具有多个 HAVING 值的多个列进行 GROUP BY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70868977/

相关文章:

mysql - 十字交叉重复搜索电话号码

php - 如何在整个代码中检查mysql查询执行时间

r - 在R中分组后选择聚合列的第n个值

c# - 使用 EF 4.1 在 Linq to SQL 中按 DateTime.Date 分组

php - 每个月的Mysql计数

java - 为什么 TOAD 比我的 java 代码更快?

javascript - 从php->mysql节点中xml的深度

mysql - 从 4 个不同的表中按日期排序

MySQL 分组依据 where day <= x

php - 如何计算数据库中的列,如果为空则返回 0 PHP