PostgreSQL:获取连接查询中的行数

时间:2018-03-29 09:29:31

标签: sql inner-join postgresql-9.3

我正在尝试将一些数据连接到几个表。我有一个审计表,用于存储用户执行的操作的审计。我试图按照他们拥有的审核次数和审核次数来获取用户列表。我有以下查询:

<system.web>
   <authentication mode="Windows" />
 </system.web> 

此查询将在审计表中为每个条目提供1行。我只想要每个用户1行,审计表中的条目数按审计次数排序。

有没有办法做到这一点。当我尝试在上述查询中包含SELECT s.user_created, u.first_name, u.last_name, u.email, a.message as audits FROM cbrain_school s inner join ugrp_user u on s.user_created = u.user_id inner join audit a on u.user_id = a.user_id order by u.created_time desc;

时,我收到了错误消息

1 个答案:

答案 0 :(得分:0)

首先,您要加入表格s.user_created。为什么?您没有从此表中选择任何数据(u.user_id除外,它只是cbrain_school.user_created)。我想你想限制用户显示EXISTS?然后使用INselect u.user_id, u.first_name, u.last_name, u.email, a.message as audits from ugrp_user u inner join audit a on u.user_id = a.user_id where u.user_id in (select user_created from cbrain_school) order by u.created_time desc; 进行查找。

cbrain_school.user_created

这显示select u.user_id, u.first_name, u.last_name, u.email, a.cnt from ugrp_user u inner join ( select user_id, count(*) as cnt from audit group by user_id ) a on u.user_id = a.user_id where u.user_id in (select user_created from cbrain_school) order by u.created_time desc; 仅仅是标准。 (但是查询结果当然是相同的。)当你对连接的行不感兴趣时​​,避免连接是个好习惯。

现在您不想再显示每条消息,而只是按用户计算它们。因此,加入消息时,您应该加入消息计数:

{{1}}

(您也可以加入所有邮件,然后才聚合,但我不建议这样做。它适用于此和许多其他查询,但在使用多个表时容易出错,您可能突然计算或在汇总之前加入一个很好的习惯。)