计数大于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
s10001
,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秒钟的代价:)