SQL组由两个以上的连接组成

时间:2017-03-12 17:14:24

标签: mysql sql

这些是我的表格:

create table articles(
    id integer auto_increment,
    site varchar(64) not null,
    title varchar(512) not null,
    link varchar(512) not null,
    pub_date datetime not null,
    primary key(id)
);

create table entities (
    id integer auto_increment,
    entity varchar(1024) not null,
    entity_type varchar(32) not null,
    primary key(id)
);

create table articles_entities (
    article_id integer not null,
    entity_id integer not null,
    foreign key(entity_id) references entities(id),
    foreign key(article_id) references articles(id)
);

这是我要做的事情的起点:

select count(*), entity_type from entities group by entity_type;

我显然得到的东西看起来像这样:

+----------+---------------+
| count(*) | entity_type   |
+----------+---------------+
|    15418 | locations     |
|    21789 | misc          |
|    62306 | organizations |
|   121307 | people        |
+----------+---------------+

我想要的是这样的:

+----------+---------------+------+
| count(*) | entity_type   | site |
+----------+---------------+------+
|    15418 | locations     | ABC  |
|    21789 | misc          | ABC  |
|    62306 | organizations | ABC  |
|   121307 | people        | ABC  |
|    13418 | locations     | CNN  |
|    22789 | misc          | CNN  |
|    65306 | organizations | CNN  |
|   132307 | people        | CNN  |
+----------+---------------+------+

如何设置该查询以提供那种计数?

1 个答案:

答案 0 :(得分:1)

您需要join

select count(*), entity_type, site 
from entities 
left join articles_entities on entity_id = entities.id
left join articles on article_id = articles.id
group by entity_type, site;

我使用left join假设您的实体可能与您希望包含在结果中的文章不对应。如果不是这种情况,则可以删除left