假设我有这样一张表格:
但这只检查了组中第一行的“testValue”是否匹配。在这个例子中,我的预期输出应该是:
+----+----------+
|name|testValue |
+----+----------+
|A |3 |
+----+----------+
|A |4 |
+----+----------+
|A |7 |
+----+----------+
|B |0 |
+----+----------+
|B |3 |
+----+----------+
|C |5 |
+----+----------+
|C |5 |
+----+----------+
|C |6 |
+----+----------+
现在我想按名称对列进行分组,并只能检索满足某些条件的行所在的组。对于每个组,我想检索所有的“testValues”,目前我是通过使用GROUP_CONCAT来实现这一点。
例如,如果我想检索所有“testValues”之间为4到8的任何分组:
SELECT
name,
testValue,
GROUP_CONCAT(testValue SEPARATOR '#') AS testValues
FROM myTable
GROUP BY name
HAVING testValue > 4 AND testValue < 8
但这只检查了组中第一行的“testValue”是否匹配。在这个例子中,我的预期输出应该是:
+----+---------+----------+
|name|testValue|testValues|
+----+---------+----------+
|A |3 |3#4#7 |
+----+---------+----------+
|C |5 |5#5#6 |
+----+---------+----------+
我的示例查询的实际输出是:
+----+---------+----------+
|name|testValue|testValues|
+----+---------+----------+
|C |5 |5#5#6 |
+----+---------+----------+
我的问题:
1. 如何使它检查是否有任何一行匹配,而不仅仅是第一行?我是否应该使用HAVING
来实现这一点?
- 此外,有没有更好的方法从一组行中返回所有值,而不是使用GROUP_CONCAT?
顺便说一句,我尝试过在谷歌上搜索,但发现这很困难。