Chr*_*ski 3 mysql sql aggregate-functions
我有两个表,一个用于文章/民意调查,一个用于对这些文章进行投票.投票在枚举字段中进行上/下,以及其他几个选项.我正在尝试创建一个查询,它将返回我需要的文章数据,并给我所有投票的总和.不幸的是,我得到了意想不到的结果.它统计了我所有的选票,就好像他们是第一次进入,而没有其他任何人.
如何正确地将我的投票链接到他们所属的民意调查?
tblVotes
[PK] primaryId | voterId (FK) | voteValue (enum) | postID (fk)
----------------------------------------------------------------------
1 10 up 1
2 11 down 1
3 11 up 10
tblContent
[PK] unique Id | postTitle | postBody | postAuthor(FK) |
------------------------------------------------------------------
1 foo foofoo 12
10 bar barbar 10
11 foobar foofoobarbar 10
Run Code Online (Sandbox Code Playgroud)
当我调查下面详述的查询时,我希望我会得到这样的结果:
uniqueId |userName | pollDate | postTitle |postBody | upVotes| downVotes
--------------------------------------------------------------------------
1 bob 1/1/11 foo foofoo 1 1
10 john 1/2/11 bar barbar 1 null
11 john 1/3/11 foofoo foofoobar.. null null
Run Code Online (Sandbox Code Playgroud)
不幸的是,我实际上得到了这样的结果:
uniqueId |userName | pollDate | postTitle |postBody | upVotes| downVotes
--------------------------------------------------------------------------
1 bob 1/1/11 foo foofoo 2 1
10 john 1/2/11 bar barbar null null
11 john 1/3/11 foofoo foofoobar.. null null
Run Code Online (Sandbox Code Playgroud)
这是我的SQL语句:
SELECT
tblContent.uniqueID,
tblUsers.userName,
tblContent.postDate,
tblContent.postTitle,
tblContent.postBody,
votes.upVotes,
votes.downVotes
FROM
tblContent
LEFT JOIN
(
SELECT
postId,
SUM(CASE WHEN tblVotes.voteType = 'up' THEN 1 ELSE 0 END) as upVotes,
SUM(CASE WHEN tblVotes.voteType = 'down' THEN 1 ELSE 0 END) as downVotes
FROM
tblVotes, tblContent
WHERE
tblContent.uniqueId = tblVotes.postId
) votes
ON tblContent.uniqueId = votes.postId
LEFT JOIN
tblUsers
ON tblUsers.userId = tblContent.postAuthor
WHERE
postApproved = true
ORDER BY
postDate DESC
Run Code Online (Sandbox Code Playgroud)
OMG*_*ies 11
使用:
SELECT p.title,
SUM(CASE WHEN v.votevalue = 'yes' THEN 1 ELSE 0 END) AS yesCount,
SUM(CASE WHEN v.votevalue = 'no' THEN 1 ELSE 0 END) AS noCount
FROM POLLS p
LEFT JOIN VOTES v ON v.pollid = p.uniqueid
GROUP BY p.title
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |