为什么我不能在SQL中使用select表作为from的输入

时间:2016-04-29 09:45:25

标签: sql

我是SQL新手并且作为一种培训,我只想玩堆栈交换数据资源管理器,我想知道为什么下面的代码不起作用:

SELECT count(*)
FROM (SELECT id
      FROM Posts
      WHERE PostTypeId = 2 AND OwnerUserId = '##UserId##')

我的主要目标是找到他们的答案超过1000的用户,但是为了知道,我无法弄清楚该代码的问题是什么,以及为什么我没有得到一个数字用户的答案......

4 个答案:

答案 0 :(得分:2)

GROUP BY。使用HAVING仅返回超过1000的ID。

select id
from Posts
group by id
having count(*) > 1000

也许你想在having子句中使用其他聚合函数,比如sum(points) > 1000或类似的。

答案 1 :(得分:2)

您必须为派生表设置别名:

select count(*)
from (SELECT id
  FROM Posts
  WHERE PostTypeId = 2 AND OwnerUserId = '##UserId##') s

答案 2 :(得分:1)

通过帮助我的朋友,我可以处理我的问题。关键部分是SQL语句要求我们为子查询中创建的新表设置别名。之后我们可以在任何我们想要的地方使用这个别名,这段代码将有助于实现我的主要目标:

select x.OwnerUserId
from (select Posts.OwnerUserId,s.cnt
      from Posts inner join (SELECT Posts.OwnerUserId, count(OwnerUserId)as cnt
                             FROM Posts
                             WHERE PostTypeId = 2
                             group by Posts.OwnerUserId) as s on Posts.OwnerUserId=s.OwnerUserId )as x
where x.cnt>100
group by x.OwnerUserId

如果有人能找到性能更好的更好的方法,请在这里分享;)

答案 3 :(得分:0)

SELECT id,COUNT(*) 来自帖子 在哪里PostTypeId = 2 和 OwnerUserId =' ## UserId ##';