如何在有条款的情况下制定两个条件

use*_*868 8 mysql

我有一张类似于的表:

domain      |   file      | Number 
------------------------------------     
aaa.com     | aaa.com_1   | 111
bbb.com     | bbb.com_1   | 222
ccc.com     | ccc.com_2   | 111
ddd.com     | ddd.com_1   | 222
eee.com     | eee.com_1   | 333
Run Code Online (Sandbox Code Playgroud)

我需要查询该Domains共享的编号,Number并以其File名称结尾_1.我尝试了以下方法:

select count(domain) as 'sum domains', file
from table 
group by Number
having
count(Number) >1 and File like '%\_1'; 
Run Code Online (Sandbox Code Playgroud)

它给了我:

sum domains | file
------------------------------
2           | aaa.com
2           | bbb.com
Run Code Online (Sandbox Code Playgroud)

我希望看到以下内容:

sum domains | file
------------------------------
1           | aaa.com
2           | bbb.com
Run Code Online (Sandbox Code Playgroud)

由于Number111出现一次File有目的_1_2,所以应该只算1.如何正确应用我之前说过的2个条件?

egg*_*yal 8

SELECT语法下所述:

HAVING条款几乎在最后一次应用,就在项目发送到客户端之前,没有优化.

换句话说,执行分组操作之后应用它(与之相反WHERE,任何分组操作之前执行).见WHERE vs HAVING.

因此,您当前的查询首先从以下形成结果集:

SELECT   COUNT(domain) AS `sum domains`, file
FROM     `table`
GROUP BY Number
Run Code Online (Sandbox Code Playgroud)

sqlfiddle上看到它:

| SUM DOMAINS |      FILE |
---------------------------
|           2 | aaa.com_1 |
|           2 | bbb.com_1 |
|           1 | eee.com_1 |

如您所见,为file列选择的值只是每个组中的值之一 - 如MySQL Extensions中所述GROUP BY:

服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选的值是不确定的.

然后,您当前的查询将根据您的HAVING子句过滤这些结果:

HAVING   COUNT(Number) > 1 AND file LIKE '%\_1'
Run Code Online (Sandbox Code Playgroud)

使用file上面选择的值,每个组匹配第二个标准; 前两个组匹配第一个标准.因此,完整查询的结果是:

| SUM DOMAINS |      FILE |
---------------------------
|           2 | aaa.com_1 |
|           2 | bbb.com_1 |

根据您的上述评论,您希望file 分组之前过滤记录,然后过滤包含多个匹配的结果组.因此分别使用WHEREHAVING(并选择Number而不是file识别每个组):

SELECT   Number, COUNT(*) AS `sum domains`
FROM     `table`
WHERE    file LIKE '%\_1'
GROUP BY Number
HAVING   `sum domains` > 1
Run Code Online (Sandbox Code Playgroud)

sqlfiddle上看到它:

| NUMBER | SUM DOMAINS |
------------------------
|    222 |           2 |


小智 6

我正在使用以下

having ( SUM(qty) > 4 AND SUM(qty) < 15 )
Run Code Online (Sandbox Code Playgroud)