SQL外连接与计数功能

时间:2014-06-27 13:50:07

标签: sql postgresql join

我正在撰写一个让我了解所有用户的查询。每个用户都可以拥有一张图片,每个用户都可以喜欢该图片一次。

共有3个表格: 用户 图片 像

所以我需要所有用户数据与他们的图片相同的数量,我想在1个查询中得到它。我使用右连接来获得没有图片的用户和没有喜欢的用户的左连接。现在我有除了喜欢之外我需要的所有信息。当我算上时,即使没有喜欢,我也总是得到1分。是否有可能在1个查询中,因为我还需要按喜欢订购?

这是我的查询。

SELECT u.uid,
       firstname,
       lastname,
       email,
       zipcode,
       city,
       street,
       Count(*) AS likes
FROM   picture p
       RIGHT JOIN USER u using(pid)
       JOIN like using(uid)
GROUP  BY uid,
          firstname,
          lastname,
          email,
          zipcode,
          city,
          street;  

编辑:

此查询正确无误:

SELECT u.uid, firstname, lastname, email, zipcode, city, street, count(L.PID) as likes 
FROM User u
LEFT JOIN Like L USING(PID) 
GROUP BY uid,firstname,lastname,email,zipcode,city,street;

2 个答案:

答案 0 :(得分:0)

从Like表中计算一些东西,例如:

SELECT u.uid, firstname,lastname,email,zipcode,city,street
     , count(L.UID) as likes 
FROM Picture p 
RIGHT JOIN User u 
    using(PID) 
LEFT JOIN Like L
    USING(UID) 
GROUP BY uid,firstname,lastname,email,zipcode,city,street;

答案 1 :(得分:0)

表结构会很好,因为看起来你的like加入可能会出现问题。乍一看,您似乎实际上在计算用户喜欢的次数"图片而不是他的图片被喜欢的次数。在任何情况下,假设它必须是喜欢某事物的用户是合理的,因此like表中的用户ID指的是那些喜欢的人,而不是&# 39;被人喜欢。

我在此假设like是一个包含外键User.uidPicture.pid的联接表。如果不是这种情况,请将问题编辑得更清楚,我会相应地改变。

如果您尝试获取所有用户(以及有关他们的其他信息),那么如果您从此开始,您会更清楚自己要做什么,所以最好如果FROM子句是User u并且从那里开始工作:

SELECT
  u.uid,
  firstname,
  lastname,
  email,
  zipcode,
  city,
  street,
  Count(*) AS 'likes'
FROM User u
LEFT JOIN Like l ON u.pid = l.pid
GROUP BY
  u.uid,
  firstname,
  lastname,
  email,
  zipcode,
  city,
  street