Postgesql:count 包含项目的标签



>我有一个包含项目标签的表。 如何发出请求,该请求将显示与我的项目相同的标签和数量。

CREATE TABLE items_tags_sets (
uit_set_id varchar PRIMARY KEY,
item_id varchar,
tag varchar
);
insert into items_tags_sets values('uid1', 'it1', 'tag_test1');
insert into items_tags_sets values('uid2', 'it2', 'tag_test1');
insert into items_tags_sets values('uid3', 'it3', 'tag_test2');
insert into items_tags_sets values('uid4', 'it4', 'tag_test2');
insert into items_tags_sets values('uid5', 'it1', 'tag_test3');
insert into items_tags_sets values('uid6', 'it2', 'tag_test3');
insert into items_tags_sets values('uid7', 'it3', 'tag_test4');
insert into items_tags_sets values('uid8', 'it4', 'tag_test4');
insert into items_tags_sets values('uid9', 'it1', 'tag_test5');
insert into items_tags_sets values('uid10', 'it2', 'tag_test5');
insert into items_tags_sets values('uid11', 'it1', 'tag_test1');
insert into items_tags_sets values('uid12', 'it1', 'tag_test1');
insert into items_tags_sets values('uid13', 'it1', 'tag_test3');
----------------------------------
-- 28062020
select
items_tags_sets.uit_set_id,
items_tags_sets.item_id,
items_tags_sets.tag,
count(distinct items_tags_sets.tag) as tags_count

from items_tags_sets
where 
items_tags_sets.item_id = 'it1'
group by items_tags_sets.uit_set_id, items_tags_sets.tag;

我需要这样的结果:

-----------------------
| it1 | tag_test1 | 3 |
| it1 | tag_test3 | 2 |
| it1 | tag_test5 | 1 |
-----------------------

链接到代码:https://rextester.com/CTMOQ42435

您必须group by item_id, tag

select
item_id,
tag,
count(*) as tags_count
from items_tags_sets
where item_id = 'it1'
group by item_id, tag;

请参阅演示。
结果:

| item_id | tag       | tags_count |
| ------- | --------- | ---------- |
| it1     | tag_test1 | 3          |
| it1     | tag_test3 | 2          |
| it1     | tag_test5 | 1          |

根据您的描述,我认为您想要一个自我连接和聚合:

select its_1.item_id, its_1.tag, count(distinct its.item_id) as cnt
from items_tags_sets its_1 left join
items_tags_sets its
on its_1.tag = its.tag 
where its_1.item_id = 'it1'
group by its_1.item_id, its_1.tag
order by cnt desc;

但是,这将返回 2/2/2而不是 3/2/1。

这是一个数据库<>小提琴。

如果您没有在其上使用任何聚合函数,则应排除未在 group by 子句中使用的列。

select
item_id,
tag,
count(tag) as tags_count

from items_tags_sets
where 
item_id = 'it1'
group by item_id, tag;

输出----------

item_id tag tags_count
it1 tag_test1   3
it1 tag_test3   2
it1 tag_test5   1

相关内容

  • 没有找到相关文章