我有一个包含varchar的两个表:
项目\标记\集:项目,标记
和
用户:用户id,名称。
如何提出一个要求,将显示标签和相同的标签数量我的项目。请求还应该在结果中包含一个指针(它的标记),指向该标记属于指定用户的事实。
CREATE TABLE items_tags_sets (
uit_set_id varchar PRIMARY KEY,
item_id varchar,
user_id varchar,
tag varchar
);
CREATE TABLE users (
user_id varchar PRIMARY KEY,
name varchar
);
insert into items_tags_sets values('uid1', 'it1', 'usr1', 'tag_test1');
insert into items_tags_sets values('uid2', 'it2', 'usr2', 'tag_test1');
insert into items_tags_sets values('uid3', 'it3', 'usr3', 'tag_test2');
insert into items_tags_sets values('uid4', 'it4', 'usr1', 'tag_test2');
insert into items_tags_sets values('uid5', 'it1', 'usr2', 'tag_test3');
insert into items_tags_sets values('uid6', 'it2', 'usr3', 'tag_test3');
insert into items_tags_sets values('uid7', 'it3', 'usr1', 'tag_test4');
insert into items_tags_sets values('uid8', 'it4', 'usr2', 'tag_test4');
insert into items_tags_sets values('uid9', 'it1', 'usr3', 'tag_test5');
insert into items_tags_sets values('uid10', 'it2', 'usr1', 'tag_test5');
insert into items_tags_sets values('uid11', 'it1', 'usr2', 'tag_test1');
insert into items_tags_sets values('uid12', 'it1', 'usr3', 'tag_test1');
insert into items_tags_sets values('uid13', 'it1', 'usr2', 'tag_test3');
insert into users values('usr1', 'name1');
insert into users values('usr2', 'name2');
insert into users values('usr3', 'name3');
--------------------------------------------------------------
SELECT
items_tags_sets.item_id,
items_tags_sets.tag,
count(items_tags_sets.tag) as tags_count,
items_tag_you.user_id as its_tag
FROM items_tags_sets
LEFT OUTER JOIN users as items_tag_you on items_tag_you.user_id = items_tags_sets.user_id and items_tag_you.user_id = 'usr1'
WHERE items_tags_sets.item_id = 'it1'
GROUP BY items_tags_sets.item_id, items_tags_sets.tag, items_tag_you.user_id;
我需要这样的结果:
----------------------------------------------
| item_id | tag | tags_count | its_tag |
|--------------------------------------------|
| it1 | tag_test1 | 3 | usr1 |
| it1 | tag_test3 | 2 | |
| it1 | tag_test5 | 1 | |
----------------------------------------------
链接到代码:https://rextester.com/gmjqr57790
1条答案
按热度按时间8ljdwjyq1#
而不是函数“count()。。。按“use the windowed function counter part”count()over…“分组。按该计数的结果降序,然后对该计数也使用“distinct on”子句。
我不明白为什么要用更复杂的“items\u tag\u you”来别名一个简单的表名“users”,从而设置一个更难理解的名称。所以我没有,但两个表都使用了一个简单的别名。一天的小贴士:让你的查询尽可能简单易读,你总是可以在最终输出中添加更多描述性的术语。