#sql #postgresql
Вопрос:
Предположим, что у меня есть 3 таблицы,
student(user_id, occupation) thumbsup(user_id, post_id) post(post_id, user_id)
Мне нужно подсчитать количество хороших постов, которые есть у одного студента. Условия таковы
a post can receive multiple thumbs up but once it receives at least one thumbup it is a goodpost goodposts are how many posts that one user posted that received thumbsup
Например, если идентификатор пользователя 1 публикует 3 сообщения с идентификаторами post_id, 3,4,5, 6 и post_id 3 получает 2 больших пальца вверх, а идентификатор post_id 4 получает 5 больших пальцев вверх, а идентификатор post_id 5 получает 10 больших пальцев вверх, 6 получает 0 больших пальцев вверх, это означает, что идентификатор пользователя 1 имеет 3 хороших сообщения, потому что у 6 в этом случае нет больших пальцев вверх
Я могу успешно спроецировать это, сделав это. Но есть одно дополнительное требование:
if a student does not have any good posts, their number of good posts should be zero.
Это мое текущее решение, которое проецирует студентов, если у них есть хорошие посты
(SELECT temp2.user_id, S.occupation, goodpost FROM (SELECT P.user_id, COUNT (P.user_id) as goodpost FROM (SELECT T.post_id, Count(*) AS likes FROM swoosh.thumbsup T group by T.post_id) As TEMP, swoosh.post P WHERE P.post_id = temp.post_id GROUP BY P.user_id) temp2, swoosh.Student S WHERE temp2.user_id = S.user_id)
Но мне нужно спроецировать те идентификаторы пользователей, которые тоже не получают большие пальцы в этой таблице. Каков же этот подход
Комментарии:
1. Сделайте левое соединение, чтобы собрать всех студентов и использовать
EXISTS
для определения хороших должностей. Затем сгруппируйтесь и посчитайте.2. Можете ли вы показать мне синтаксис, я пытался это сделать, но это не работает
3. Я получил это, используя полное соединение и совместное использование, но я, к сожалению, не знаю, как это работает
4. Ну, это то, чему тебя пытается научить твой класс. Спросите своего учителя.