Sql 我如何加入这些表以获得此计数?
我有4张桌子:Sql 我如何加入这些表以获得此计数?,sql,postgresql,Sql,Postgresql,我有4张桌子: users id int primary key questions id int primary key user_id int references users(id) answers id int primary key question_id references questions(id) user_id references users(id) likes id int primary key answer_id references answers(id) q
users
id int primary key
questions
id int primary key
user_id int references users(id)
answers
id int primary key
question_id references questions(id)
user_id references users(id)
likes
id int primary key
answer_id references answers(id)
question_id references questions(id)
check answer_id xor question_id
like可以引用答案或问题,但不能同时引用两者,因此一个外键将为空
likes表中的user_id是放置like的用户
我如何计算每个用户的问题和答案上的赞数 一种方法使用
union all
:
select 'questions' as which, count(*)
from questions q join
likes l
on l.question_id = q.id
where q.user_id = $user_id
union all
select 'answers' as which, count(*)
from answers a join
likes l
on l.answer_id = a.id
where a.user_id = $user_id;
编辑:
如果您希望在一行中显示所有用户的结果,那么关联子查询是一种非常简单的方法:
select u.*,
(select count(*)
from questions q join
likes l
on l.question_id = q.id
where q.user_id = u.id
) as question_likes,
(select count(*)
from answers a join
likes l
on l.answer_id = a.id
where a.user_id = u.id
) as answer_likes
from users u;
一种方法使用
union all
:
select 'questions' as which, count(*)
from questions q join
likes l
on l.question_id = q.id
where q.user_id = $user_id
union all
select 'answers' as which, count(*)
from answers a join
likes l
on l.answer_id = a.id
where a.user_id = $user_id;
编辑:
如果您希望在一行中显示所有用户的结果,那么关联子查询是一种非常简单的方法:
select u.*,
(select count(*)
from questions q join
likes l
on l.question_id = q.id
where q.user_id = u.id
) as question_likes,
(select count(*)
from answers a join
likes l
on l.answer_id = a.id
where a.user_id = u.id
) as answer_likes
from users u;
如果我理解正确,您需要计算每个用户id的喜好,这些喜好是通过回答和问题一起获得的 如果是,那么一种方法是:
select coalesce(questions.user_id, answers.user_id) as liked_user_id, count(*)
from likes
left join questions
on likes.question_id = questions.id
left join answers
on likes.answer_id = answers.id
group by liked_user_id
如果我理解正确,您需要计算每个用户id的喜好,这些喜好是通过回答和问题一起获得的 如果是,那么一种方法是:
select coalesce(questions.user_id, answers.user_id) as liked_user_id, count(*)
from likes
left join questions
on likes.question_id = questions.id
left join answers
on likes.answer_id = answers.id
group by liked_user_id
你是在寻找问题和答案的组合喜欢,还是每个总数都有一列?组合…….你是在寻找问题和答案的组合喜欢,还是每个总数都有一列?组合…….美丽,但你将用户id作为参数传递,我想要的是每个用户行有一行,其中包含总喜欢数,所以我也需要加入用户。@AhmadAl kheat。这就是编辑后的版本所做的。beauty,但您正在将user_id作为参数传递,我想要的是,每个用户行中有一行包含总喜欢数,所以我也需要加入用户。@AhmadAl kheat。这就是编辑版本所做的。