搜索

首页  >  问答  >  正文

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

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

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

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;

示例数据

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,但我似乎无法弄清楚如何为每列设置不同的值。

P粉775723722P粉775723722266 天前431

全部回复(1)我来回复

  • P粉818317410

    P粉8183174102024-02-27 00:58:40

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

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

    回复
    0
  • 取消回复