【问题标题】:Error is SQL Server: Each GROUP BY expression must contain at least one column that is not an outer reference错误是 SQL Server:每个 GROUP BY 表达式必须至少包含一个不是外部引用的列
【发布时间】:2019-10-11 08:05:51
【问题描述】:

有人可以告诉我我在这里做错了什么吗?我想要做的是,我想获得那些跟随一个人的人的信息,假设我跟随一个人。这里,1003 是我已经关注的人的用户 ID,1001 是我的用户 ID

SELECT USERID,
       USERNAME,
       PHOTO,
       COUNT(FOLLOWER)
FROM   USERS
       LEFT JOIN FOLLOW
              ON USERS.userid = Follow.following
WHERE  USERID IN (SELECT FOLLOWING
                  FROM   FOLLOW
                  WHERE  FOLLOWER IN (SELECT FOLLOWER
                                      FROM   FOLLOW
                                      WHERE  FOLLOWING = 1003)
                  GROUP  BY USERID,
                            USERNAME,
                            PHOTO
                  EXCEPT
                  (SELECT FOLLOWING
                   FROM   FOLLOW
                   WHERE  FOLLOWING = 1003
                           OR FOLLOWER = 1001)) 

【问题讨论】:

  • 如果去掉 EXCEPT 部分,它会起作用吗? (分而治之……en.wikipedia.org/wiki/Divide-and-conquer_algorithm
  • @jarlh 恐怕我删除它也不起作用
  • GROUP BY ... COUNT(FOLLOWER) 肯定是不正确的。 COUNT 之类的聚合函数在 GROUP BY 创建的组上运行,因此不能在其中引用。但似乎您尝试分组的其余列甚至都不是来自该表。不清楚你想用它做什么。为什么在EXCEPT 之前还需要GROUP BY
  • @MartinSmith 是的,抱歉,我没有注意到我在 group by 中添加了 COUNT(FOLLOWER)。但即使我删除它,它也会显示相同的错误
  • 只需删除整个GROUP BY。你没有做任何聚合,所以不需要它

标签: sql sql-server


【解决方案1】:

您只需要再次加入FOLLOW 表作为您的另一组关注者1001 和您的朋友1003

SELECT USERID, USERNAME, PHOTO, COUNT(f1.FOLLOWER) 
FROM USERS 
LEFT JOIN FOLLOW ON USERS.userid = Follow.following 
LEFT JOIN FOLLOW as f1 ON f1.following = Follow.following and f1.FOLLOWING IN (1001, 1003)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2020-05-10
    相关资源
    最近更新 更多