mysql - 同一列上多个条件的联合结果

标签 mysql

我想根据具有多个 where 条件的单个列来选择两列数据。

SELECT country.countryname,COUNT(users.uid) as cnt
FROM users
JOIN country
ON users.country = country.countrycode
WHERE users.useractivated = 1 AND users.status = 'on'
GROUP BY users.country
ORDER BY cnt DESC
LIMIT 30

此查询为我提供了主要的 cnt 列。现在我想要一个额外的 cnt2 列

根据以下条件选择

users.status <> 'on'

但仅适用于之前主要选择的 30 个国家/地区。

所以输出看起来像

+----------------+-------+---------+
|   countryname  |   cnt | cnt2    |
+----------------+-------+---------+
| USA            | 1012  |  12     |
| CANADA         | 1125  |  135    |
| ...            | ...   |  ...    |
+----------------+-------+---------+

我怎样才能做到这一点?

最佳答案

将 SUM 与 if 结合使用

SUM(IF(users.status = 'on', 1, 0)) AS cnt

SUM(IF(users.status <> 'on', 1, 0)) AS cnt2

查询:-

SELECT country.countryname,
SUM(IF(users.status = 'on', 1, 0)) AS cnt,
SUM(IF(users.status <> 'on', 1, 0)) AS cnt2
FROM users
JOIN country
ON users.country = country.countrycode
WHERE users.useractivated = 1
GROUP BY users.country
ORDER BY cnt DESC
LIMIT 30

关于mysql - 同一列上多个条件的联合结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33993355/

相关文章:

C# mysql插入查询,如果记录存在则更新

mysql - 显示 MySQL 中日期时间在下一小时内的行

mysql - 将主标志置于一对多关系中的位置

c# - ADO.Net Entity Framework ,数据读取期间遇到 fatal error

mysql - 想要在最短的时间内使用 Excel 工作表中的值更新 MySQL 数据库

java - 删除数据库中间的一些行后,有什么方法可以滚动 SQL 中的所有行吗?

php - 对 Doctrine 中的实体使用自定义查询 - Symfony Form

php - 为什么我的 tmp_file_upload 文件不存在?我正在使用 php 5.6

PHP 帮助,不确定为什么这不起作用

javascript - php:更改密码和插入当前密码的表单