2016-04-29 53 views
1

我是SQL新手,并且作为培训,我只是想与堆栈交换数据资源管理器一起玩,我想知道为什么下面的代码不会“T工作:为什么我不能在SQL中使用选择表作为输入

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

我的主要目标是找到用户,他们的答案是1000多,但知道了,我想不通的是代码的问题是什么,为什么我没有得到一个用户的答案的数量...

+0

只需添加“AS foobar”广告宣告结束,它应该起作用。 sql语句要求你为在子查询 – Webeng

+0

@Webeng tnx man中创建的新表设置一个别名,我得到我的答案;) –

回答

2

做一个GROUP BY。使用HAVING与超过1000

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

也许你想在having子句中其他一些聚合函数,像sum(points) > 1000或类似的只返回的ID。

+0

tnx用于响应,但我认为你的代码不应该有AND的其余部分,并且别的,当我在stackexchange服务器上运行ur代码时,我什么也没有,你会再次检查你的代码吗? –

+0

删除了WHERE子句。 – jarlh

+0

错误得到修复,但我没有得到任何结果 –

0

SELECT ID,COUNT(*)FROM 帖子 WHERE PostTypeId = 2 AND OwnerUserId = '## ##用户ID';

2

您必须设置一个别名为您的派生表:帮助我的朋友

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

谢谢你的回答,现在你能告诉我如何引用's'表的列吗? ??我想在新行中使用它...... –

+0

我不确定你的意思......'select s.id'也许? –

+0

亲爱的我的朋友,我可以找到实现我的目标的方式,我张贴下面的代码,谢谢你的帮助;) –

1

,我能胜任我的problem.the关键部分是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 

如果有人能找到它具有更好的性能更好的办法,PLZ在这里分享它;)

相关问题