我正在尝试创建一个 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;
示例数据
示例 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/