Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计数大于1的MySQL group by with where子句_Mysql - Fatal编程技术网

计数大于1的MySQL group by with where子句

计数大于1的MySQL group by with where子句,mysql,Mysql,我知道这应该很简单,但就我的一生而言,我无法让我的查询满足我的需要 我正在查找按ref分组的具有特定状态(paid)的所有行,但前提是找到的行数超过1行 这是我的示例表: +-----+----------+----------+-------+ | id | deleted | status | ref | +-----+----------+----------+-------+ | 1 | 0 | pending | 10001 | | 2 |

我知道这应该很简单,但就我的一生而言,我无法让我的查询满足我的需要

我正在查找按
ref
分组的具有特定状态(
paid
)的所有行,但前提是找到的行数超过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 |
+-----+----------+----------+-------+
这是我的SQL:

SELECT * FROM `orders`
WHERE `deleted` = 0 AND `status` = 'paid'
GROUP BY SUBSTR(`ref`,0,5)
HAVING COUNT(*) > 1
ORDER BY `id` DESC
我需要通过SUBSTR进行匹配,因为
ref
有时包含附加的数字

问题是我的查询返回以下内容:

+-----+----------+---------+-------+
| id  | deleted  | status  |  ref  |
+-----+----------+---------+-------+
|   2 |        0 | paid    | 10001 |
+-----+----------+---------+-------+
当我希望它返回
ref
s
10001
10003
10006

有人能帮我找出我做错了什么吗

谢谢

试试看

SELECT * FROM `orders`
WHERE `deleted` = 0 AND `status` = 'paid'
GROUP BY SUBSTR(`ref`,1,5)
HAVING COUNT(*) > 1
ORDER BY `id` DESC
SUBSTR的位置参数以1开头,而不是0。

来自SUBSTR文档:

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

所以试试这个:

SELECT * FROM `orders`
WHERE `deleted` = 0 AND `status` = 'paid'
GROUP BY SUBSTR(`ref`,1,5)
HAVING COUNT(*) > 1
ORDER BY `id` DESC
查询应该是

SELECT * from order
WHERE status="paid"
GROUP BY SUBSTRING('ref',1,5)
HAVING COUNT(*) > 1;

我被8秒打败了……)塔克斯!感激。。我确实引用了医生的话。。这就是我花了8秒钟的代价:)