我是SQL新手并且作为一种培训,我只想玩堆栈交换数据资源管理器,我想知道为什么下面的代码不起作用:
SELECT count(*)
FROM (SELECT id
FROM Posts
WHERE PostTypeId = 2 AND OwnerUserId = '##UserId##')
我的主要目标是找到他们的答案超过1000的用户,但是为了知道,我无法弄清楚该代码的问题是什么,以及为什么我没有得到一个数字用户的答案......
答案 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 ##';