获取关键字出现的次数

Rob*_*ert 7 sql sql-server

假设我有以下数据,最后一列关键字只是其他4个列的组合.

??????????????????????????????????????????????????????????????????????????????????
? ID ? Name ?    Add1    ?  Add2   ?    Add3    ?            Keyword             ?
??????????????????????????????????????????????????????????????????????????????????
?  1 ? John ? W Brown St ? Edison  ? Washington ? JohnW Brown StEdisonWashington ?
?  2 ? Paul ? E High Rd  ? Peapack ? New Jersey ? PaulE High RdPeapackNew Jersey ?
?  3 ? John ? Greams Rd  ? Peapack ? Washington ? JohnGreams RdPeapackWashington ?
??????????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

现在,用户可以输入任何文本字段Name,Add1,Add2,Add3并单击搜索,它应该搜索所有字段.

为此,我正在尝试这个,

SELECT *, COUNT(ID) AS FREQUENCY FROM TABA WHERE ID IN
(
 (SELECT ID FROM TABA WHERE KEYWORD LIKE '%WASHINGTON%')
 UNION ALL
 (SELECT ID FROM TABA WHERE KEYWORD LIKE '%JOHN%')
 UNION ALL
 (SELECT ID FROM TABA WHERE KEYWORD LIKE '%PEAPACK%')
)
GROUP BY ID
ORDER BY FREQUENCY
Run Code Online (Sandbox Code Playgroud)

预期产出:

?????????????????????????????????????????????????????????????
? ID ? Name ?    Add1    ?  Add2   ?    Add3    ? Frequency ?
?????????????????????????????????????????????????????????????
?  3 ? John ? Greams Rd  ? Peapack ? Washington ?         3 ?
?  1 ? John ? W Brown St ? Edison  ? Washington ?         2 ?
?  2 ? Paul ? E High Rd  ? Peapack ? New Jersey ?         1 ?
?????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

但我得到的所有频率值为1.我做错了什么?

小智 3

该部分... WHERE ID IN ( ...) ...只会进行“是或否”检查,但您想要计数。这必须通过 JOIN 来完成。

尝试这个:

SELECT TABA.*, COUNT(sub.ID) AS FREQUENCY FROM TABA JOIN 
(
 (SELECT ID FROM TABA WHERE KEYWORD LIKE '%WASHINGTON%')
 UNION ALL
 (SELECT ID FROM TABA WHERE KEYWORD LIKE '%JOHN%')
 UNION ALL
 (SELECT ID FROM TABA WHERE KEYWORD LIKE '%PEAPACK%')
) sub ON sub.ID=TABA.ID
GROUP BY TABA.ID
ORDER BY FREQUENCY
Run Code Online (Sandbox Code Playgroud)