MySQL 条件分组

标签 mysql sql

我有这样的数据:

+---------------+------+
| timestamp     | robo |
+---------------+------+
| 1518259341785 | A    |
| 1518259341785 | A    |
| 1518259341785 | A    |
| 1518259341785 | RE   |
+---------------+------+

还有这个:

+---------------+------+
| timestamp     | robo |
+---------------+------+
| 1518259341788 | RE   |
| 1518259341788 | RE   |
| 1518259341788 | RE   |
| 1518259341788 | A    |
+---------------+------+

众所周知,如果我们对数据进行分组并计算行数,使用以下 SQL:

SELECT timestamp, robo, COUNT(*) AS num_rows
FROM tables
GROUP BY timestamp

num_rows 将是 4。如何根据条件 only if robo RE = 1 在时间戳中对数据进行分组。这样 1518259341788 组就不会计数/出现。谢谢。

更新: 无条件分组结果:

+---------------+------+----------+
| timestamp     | robo | COUNT(*) |
+---------------+------+----------+
| 1518259341785 | A    |        4 |
| 1518259341788 | A    |        4 |
+---------------+------+----------+

条件分组的预期结果:

+---------------+------+----------+
| timestamp     | robo | COUNT(*) |
+---------------+------+----------+
| 1518259341785 | A    |        4 |
+---------------+------+----------+

最佳答案

如果您想获得每个timestamp值的记录数,但前提是该timestamp值的RE记录数是1,那么你可以这样做:

SELECT timestamp, COUNT(*) AS num_rows
  FROM tables
 GROUP BY timestamp
HAVING SUM(CASE WHEN robo = 'RE' THEN 1 ELSE 0 END) = 1

关于MySQL 条件分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50260982/

相关文章:

php - SELECT返回空行,尽管它存在

php - 如何使用php对mysql表中同一字段中的月份和年份值进行排序

MySql 错误 > 超过锁定等待超时;尝试重新启动事务 SQLState : 41000 VendorError: 1205

php - 如何获得最接近现有值的 SUMMED mySQL 值?

PHP MySQL 过滤相关内容中的内容值

sql - varchar(255) v tinyblob v tinytext

mysql - 如何将SQL/MySQL查询输出划分到多个表中?

sql - 使用另一个表中的相同列更新列并按另一个分组并使总和相等

mysql - 通过联接和日期时间查询检索行,其中日期时间是过去而不是将来

sql - 在 Oracle 中创建前导零