gpt4 book ai didi

mysql - 聚合函数中的 WHERE

转载 作者:行者123 更新时间:2023-11-29 01:57:18 25 4
gpt4 key购买 nike

我有一个简短的问题。我知道我们不能在 MySQL 的聚合函数中使用 WHERE 子句。表结构如下:

+----+------+----------+--------+
| ID | Name | Location | Active |
+----+------+----------+--------+
| 1 | Aaaa | India | 0 |
| 2 | Aaaa | USA | 0 |
| 3 | Aaaa | USA | 1 |
| 4 | Aaaa | India | 0 |
| 5 | Aaaa | UK | 0 |
| 6 | Aaaa | India | 1 |
| 7 | Aaaa | USA | 1 |
| 8 | Aaaa | USA | 0 |
| 9 | Aaaa | India | 0 |
| 10 | Aaaa | UK | 1 |
+----+------+----------+--------+

我这里的查询是:

SELECT COUNT(*), `location`, `active` FROM `users` GROUP BY `location`;

上面的查询会给我位置的计数。但是,我只需要活跃用户。所以,我需要一个 WHERE 子句来做类似的事情:

SELECT COUNT(*), `location`, `active` FROM `users` GROUP BY `location` WHERE `active`=1;

以上查询无效。有效查询将使用 HAVING。但是,如果我将查询更改为:

SELECT COUNT(*), `location`, `active` FROM `users` GROUP BY `location` HAVING `active`=1;

计数与原始查询没有区别,即:

SELECT COUNT(*), `location`, `active` FROM `users` GROUP BY `location`;

那么,我应该怎么做才能获得该位置的活跃用户数?提前致谢。

最佳答案

在 group by so where 子句之前使用 where 将根据您的条件过滤出结果,您可以根据您的 where 条件进行计数

SELECT COUNT(*), `location`, `active` 
FROM `users`
WHERE `active`=1
GROUP BY `location`

除了您的特定问题之外,您还可以将 sum 与您的条件一起使用,这样它将作为 bool 值返回,您可以根据您的表达式进行计数

SELECT sum(`active`=1), `location`, `active` 
FROM `users`
GROUP BY `location`

上面的求和表达式等价于sum(CASE when active=1 THEN 1 ELSE 0 END)

关于mysql - 聚合函数中的 WHERE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25350115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com