使用where子句进行分组,计数等于1

时间:2014-07-02 17:57:51

标签: mysql group-by

目标:查找所有行,其中(1)数字的消息数为1,(2)消息的长度小于5个字符。我可以单独执行每个操作,但是当我在一个SQL查询中组合这两个条件时会遇到困难。

Sample Database Table:
+-----+----------+----------+
| id  | number   | message  |
+-----+----------+----------+
|   1 |      100 | Test     |
|   2 |      100 | Testing  |
|   3 |      100 | Testing  |
|   4 |      200 | Test     |
|   5 |      201 | Test     |
|   6 |      201 | Test     |
|   7 |      250 | Testing  |
|   8 |      251 | Test     |
|   9 |      300 | Testing  |
|  10 |      300 | Testing  |
+-----+----------+----------+

应该只返回行200和251.尝试以下操作,但没有运气:

SELECT * FROM `reports` WHERE LENGTH(message) < 5 GROUP BY number HAVING count(*) = '1'

返回行,但行包含计数&gt; 1。

1 个答案:

答案 0 :(得分:1)

好的,几个小时前我做了错误的改动 - 这次我的数据就像你的一样。啊,现在我看到你遇到了什么问题。你不明白MySQL解释你的SELECT的顺序;它首先在WHERE中限制结果,然后它执行GROUP BY。按设计工作。