在Postgresql中使用LIKE运算符选择count

时间:2016-11-10 16:05:20

标签: postgresql

我已经定义了这些表:

CREATE TABLE domain (
  id          BIGSERIAL NOT NULL,
  name       varchar(255) NOT NULL,
  PRIMARY KEY (id));

CREATE TABLE url (
  id         BIGSERIAL NOT NULL,
  url       text NOT NULL,
  PRIMARY KEY (id));

我想计算每个域的网址数量。我试着这样做:

SELECT
    domain.name AS dn,
    SELECT COUNT(*) FROM url WHERE url.url ILIKE '%' || dn || '%'

但没有运气。得到语法错误。 怎么做对了?

2 个答案:

答案 0 :(得分:2)

您需要在表之间进行连接,然后按域名进行分组。这导致

SELECT d.name as dn, COUNT(*) as number_of_urls
FROM domain d
INNER JOIN url u ON u.url ILIKE '%'||d.name||'%'
GROUP BY d.name

这不会为url表中零条目的任何域提供一行。如果您需要这些行,请将INNER JOIN更改为LEFT OUTER JOIN

答案 1 :(得分:1)

select d.name, count(*)
from
    domain d
    inner join
    url u on split_part(u.url, '/', 3) like '%' || d.name
group by 1

从网址中提取域将避免域出现在路径或查询字符串部分中的匹配。