tom*_*sef 5 sql join data.stackexchange.com
我试图跟踪我的表现在这里SO使用StackExchange -查询堆栈溢出,并用此查询想出了:
首先,我有这个来获取我回答的问题列表:
Select Distinct a.Id, a.CreationDate, u.DisplayName, p.Title, p.Tags,
CONCAT('http://stackoverflow.com/questions/', p.Id, '#answer-', a.Id) as Link
From Posts a
Inner Join Posts p On a.ParentId = p.Id
Inner Join Users u On a.OwnerUserId = u.Id
Inner Join PostTags pt on p.Id = Pt.PostId
Inner Join Tags t on pt.TagId = t.Id
Where a.OwnerUserId in (
9461114 --Me
)
And a.PostTypeId = 2 -- Answer
And p.PostTypeId = 1 -- Question
And t.TagName in ('jquery')
Run Code Online (Sandbox Code Playgroud)
然后我做了另一个查询来获得所有答案的原始分数(Upvote,Downvote,Accepted)
SELECT *
FROM (
SELECT v.PostID as Id, vt.Name, COUNT(*) AS CNT
FROM
Posts p
INNER JOIN Votes v
ON v.PostId = p.Id
INNER JOIN VoteTypes vt
ON v.VoteTypeId = vt.Id
WHERE
p.OwnerUserId in
(
9461114 --Me
)
GROUP BY
vt.Name, v.PostID) s_tab pivot (min(CNT)for [Name] in ([UpMod], [DownMod],[AcceptedByOriginator]))AS PVT
Run Code Online (Sandbox Code Playgroud)
然后为了使事情变得更容易,我曾经LEFT JOIN合并了我的两个查询,这就是我想出的:
Select a.Id, a.CreationDate, a.DisplayName, a.Title, a.Tags, a.Link, b.UpMod as Upvote, b.DownMod as DownVote, b.AcceptedByOriginator as Accepted
From
(Select Distinct a.Id, a.CreationDate, u.DisplayName, p.Title, p.Tags,
CONCAT('http://stackoverflow.com/questions/', p.Id, '#answer-', a.Id) as Link
From Posts a
Inner Join Posts p On a.ParentId = p.Id
Inner Join Users u On a.OwnerUserId = u.Id
Inner Join PostTags pt on p.Id = Pt.PostId
Inner Join Tags t on pt.TagId = t.Id
Where a.OwnerUserId in (
9461114 --Me
)
And a.PostTypeId = 2 -- Answer
And p.PostTypeId = 1 -- Question
And t.TagName in ('jquery')
) a
Left Join
(SELECT *
FROM (
SELECT v.PostID as Id, vt.Name, COUNT(*) AS CNT
FROM
Posts p
INNER JOIN Votes v
ON v.PostId = p.Id
INNER JOIN VoteTypes vt
ON v.VoteTypeId = vt.Id
WHERE
p.OwnerUserId in
(
9461114 --Me
)
GROUP BY
vt.Name, v.PostID) s_tab pivot (min(CNT)for [Name] in ([UpMod], [DownMod],[AcceptedByOriginator]))AS PVT
) b on a.Id = b.Id
Run Code Online (Sandbox Code Playgroud)
这太长了,我觉得还有其他方法可以做到这一点,而不会使查询看起来像这样.
我已经尝试并测试了我的查询,并且我确信它的工作方式与我想要的一样.我只是希望它更短.提前致谢!
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |