2011-08-08 42 views
3

這可能看起來像一個Meta問題,但它實際上是關於SQL的。如何將兩個SEDE(SQL)查詢用作第三個查詢的輸入?

我很好奇堆棧溢出的數量和帖子都是upvoted和downvoted。我試圖拼湊一個Data Explorer查詢來找出,但無法使其工作。

我寫了下面的子查詢找到的職位有一定數量upvotes的:

SELECT PostId as [Post Link], COUNT(v.PostId) AS 'Upvote count' 
FROM Votes v 
INNER JOIN Posts p 
ON p.Id=v.PostId 
WHERE PostTypeId = 1 
    AND VoteTypeId = 2 
GROUP BY v.PostId 
HAVING COUNT(v.PostId) > 5 

我使用一個類似的downvotes。

我不知道的是如何編寫一個查詢,它只返回那些出現在兩個子查詢結果中的帖子。我所有的嘗試都是語法錯誤。有什麼我想要做的事情,我可以流行到谷歌?也許是特殊的運營商或關鍵字?

回答

1

如果你的意思是你想拉有upvotes的具體數量以及downvotes特定數量的答案,那麼請嘗試以下方法:

SELECT 
    PostId as [Post Link], 
    COUNT(CASE VoteTypeId WHEN 2 THEN v.PostId END) AS 'Upvote count', 
    COUNT(CASE VoteTypeId WHEN 3 THEN v.PostId END) AS 'Downvote count' 
FROM Votes v 
INNER JOIN Posts p 
ON p.Id=v.PostId 
WHERE PostTypeId = 1 
    AND VoteTypeId IN (2, 3) 
GROUP BY v.PostId 
HAVING COUNT(CASE VoteTypeId WHEN 2 THEN v.PostId END) > 150 
    AND COUNT(CASE VoteTypeId WHEN 3 THEN v.PostId END) > 10 

這將選擇那些有答案同時提供超過150個贊助和10多個降價。

0

作爲替代方案,在Stack Exchange Data Explorer發現:

set nocount on 

declare @VoteStats table (PostId int, up int, down int) 

insert @VoteStats 
select 
    PostId, 
    up = sum(case when VoteTypeId = 2 then 1 else 0 end), 
    down = sum(case when VoteTypeId = 3 then 1 else 0 end) 
from Votes 
where VoteTypeId in (2,3) 
group by PostId 

set nocount off 

select top 100 p.id as [Post Link] , up, down from @VoteStats 
join Posts p on PostId = p.Id 
where down > (up * 0.5) and p.CommunityOwnedDate is null and p.ClosedDate is null 
order by up desc