MySQL group with with where子句,其count大于1

Sam*_*ron 10 mysql

这应该是非常简单的我知道,但对于我的生活,我无法得到我的查询来做我需要的.

我希望找到那些有一定地位(所有行paid)按分组ref但前提是发现了超过1行.

这是我的示例表:

+-----+----------+----------+-------+
| id  | deleted  | status   |  ref  |
+-----+----------+----------+-------+
|   1 |        0 | pending  | 10001 |
|   2 |        0 | paid     | 10001 |
|   3 |        0 | paid     | 10001 |
|   4 |        0 | paid     | 10002 |
|   5 |        1 | pending  | 10002 |
|   6 |        1 | paid     | 10002 |
|   7 |        0 | pending  | 10003 |
|   8 |        0 | paid     | 10003 |
|   9 |        0 | paid     | 10003 |
|  10 |        0 | paid     | 10003 |
|  11 |        0 | pending  | 10004 |
|  12 |        0 | paid     | 10004 |
|  13 |        1 | pending  | 10005 |
|  14 |        1 | paid     | 10005 |
|  15 |        1 | paid     | 10005 |
|  16 |        0 | paid     | 10005 |
|  17 |        0 | pending  | 10006 |
|  18 |        0 | paid     | 10006 |
|  19 |        0 | paid     | 10006 |
+-----+----------+----------+-------+
Run Code Online (Sandbox Code Playgroud)

这是我的SQL:

SELECT * FROM `orders`
WHERE `deleted` = 0 AND `status` = 'paid'
GROUP BY SUBSTR(`ref`,0,5)
HAVING COUNT(*) > 1
ORDER BY `id` DESC
Run Code Online (Sandbox Code Playgroud)

由于ref有时包含附加数字,我需要通过SUBSTR进行匹配.

问题是我的查询返回了这个:

+-----+----------+---------+-------+
| id  | deleted  | status  |  ref  |
+-----+----------+---------+-------+
|   2 |        0 | paid    | 10001 |
+-----+----------+---------+-------+
Run Code Online (Sandbox Code Playgroud)

当我想它要返回ref小号10001,10003&10006.

任何人都可以帮我解决我做错的事吗?

谢谢

Max*_*erl 19

尝试

SELECT * FROM `orders`
WHERE `deleted` = 0 AND `status` = 'paid'
GROUP BY SUBSTR(`ref`,1,5)
HAVING COUNT(*) > 1
ORDER BY `id` DESC
Run Code Online (Sandbox Code Playgroud)

SUBSTR的position-argument以1开头,而不是0.


bar*_*sju 8

来自SUBSTR doc:

对于所有形式的SUBSTRING(),将从中提取子字符串的字符串中的第一个字符的位置计为1.

试试这个:

SELECT * FROM `orders`
WHERE `deleted` = 0 AND `status` = 'paid'
GROUP BY SUBSTR(`ref`,1,5)
HAVING COUNT(*) > 1
ORDER BY `id` DESC
Run Code Online (Sandbox Code Playgroud)