【发布时间】:2014-10-26 08:56:10
【问题描述】:
所以我在 postgreSQL(以及其他)中有提交、用户、故事和视图表,如下所示:
submissions
-----------
user_id
story_id
body
views
-----------
user_id
submissions_id
users
-----------
username
我有一个复杂的 SQL 查询查找,它返回的提交按用户是否看过它排序(在 views 表中有一个 user_id 和 submit_id 条目),然后按它有多少视图:
submissions.find_by_sql("select submissions.*,
count(views.submission_id) as views_count,
(select count(*) from views
where views.user_id=#{user_id} and views.submission_id=submissions.id group by id) as counted
from submissions
left outer join views on views.submission_id=submissions.id
where submissions.story_id = #{id}
group by submissions.id
order by counted desc, views_count")
我还希望能够获取每次提交的用户名,这应该很容易:只需在 users.id=submissions.user_id 处加入用户表并将 users.username 添加到选择部分。但是,当我这样做时,我收到一个错误
column "users.username" must appear in the GROUP BY clause or be used in an aggregate function
这不应该,因为将用户添加到 group by 会删除具有相同用户的多个提交,并且我不需要聚合函数。
由于我显然必须明确说明这一点,我知道还有很多其他问题在问这个问题,但没有一个真正回答我的问题。
【问题讨论】:
-
几乎是a hundred others。
-
在发布之前,我查看了其中的大约 10 个。他们都处理与我所要求的不同的事情,但他们都没有回答我的问题。
-
您尝试了哪些标准解决方案,为什么不能让它们发挥作用?
-
将用户添加到
GROUP BY将不会删除多个提交。向GROUP BYnever 添加更多项目会删除更多重复项。只有相反的可能。
标签: sql ruby-on-rails postgresql