Sql 计算值表的出现次数

Sql 计算值表的出现次数,sql,sqlite,Sql,Sqlite,我有一个表(国家),它只包含一列(国家)。 我有一个表格(散文),它有几个列,尽管我只对“RawText”列感兴趣 我可以很容易地运行以下程序: select count(Id) Occurences from Essays where Essays.RawText like '%canada%'; 我希望能够运行一个查询,遍历长长的国家列表 理想情况下,我可以返回一个表,例如: Canada 10 USA 45 Mexico 39 如何搜索所有国家/地区?您可以使用GROUP BY

我有一个表(国家),它只包含一列(国家)。 我有一个表格(散文),它有几个列,尽管我只对“RawText”列感兴趣

我可以很容易地运行以下程序:

select count(Id) Occurences
from Essays
where Essays.RawText like '%canada%';
我希望能够运行一个查询,遍历长长的国家列表

理想情况下,我可以返回一个表,例如:

Canada 10
USA    45
Mexico 39


如何搜索所有国家/地区?

您可以使用
GROUP BY
按不同的列类型对条目进行计数,但您需要采取额外的步骤,使用
大小写将您的搜索“分类”为不同的短语:

SELECT
    RawText
FROM
    Essays
WHERE
    (Essays.RawText ILIKE '%canada%') OR (Essays.RawText ILIKE '%USA%')
GROUP BY
    CASE
        WHEN Essays.RawText LIKE '%canada%' THEN 'canada'
        WHEN Essays.RawText LIKE '%USA%' THEN 'USA'
        ELSE NULL
    END

要获得文章和国家的每一个组合,请将两个表格连接在一起。相似模式可以从国家名称构建;在SQL中,字符串连接是
|
。要聚合搜索结果,请使用分组

SELECT Country,
       COUNT(*)
FROM Countries
JOIN Essays ON RawText LIKE '%' || Country || '%'
GROUP BY Country;

看起来你正在寻找一个分组。当一篇文章提到这两个国家时会发生什么?这里真正的问题是,有很多国家(不仅仅是我例子中的3个),要将它们全部装箱需要做太多的工作,然后试图跟踪加或减将是一个问题。