我已经定义了这些表:
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 || '%'
但没有运气。得到语法错误。 怎么做对了?
答案 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
从网址中提取域将避免域出现在路径或查询字符串部分中的匹配。