[英]mysql join two tables, count and sum alias
我有疑问
SELECT p. * , COUNT( r.poll_option_id ) AS voteCount
FROM poll_options AS p
LEFT JOIN poll_responses AS r ON ( r.poll_option_id = p.id )
WHERE p.poll_id =1
GROUP BY p.id
LIMIT 0 , 30
它向我返回了正确的数据
id poll_id caption voteCount
1 1 32 1
2 1 256 1
3 1 512 0
现在,我需要计算该别名的票数,因此在本示例中,它将为1 + 1 + 0 = 2。然后将其作为另一个别名返回。 我该怎么办? 我只能使用1个查询,并且没有编辑数据库的权限。 我已经尝试从MySQL的示例连接两个表的计数和第二个表 MySQL查询的COUNT和SUM,以及两个连接表的COUNT和SUM,还有更多但没有运气。
围绕它包装另一个查询?
SELECT id, poll_id, SUM(voteCount) AS votecount
FROM ( ... your query here ... ) As subquery
GROUP BY poll_id
您可以通过count列的计算总和对您的查询使用交叉联接
SELECT t1.*,t2.totalvoteCount FROM (
SELECT p. * , COUNT( r.poll_option_id ) AS voteCount
FROM poll_options AS p
LEFT JOIN poll_responses AS r ON ( r.poll_option_id = p.id )
WHERE p.poll_id =1
GROUP BY p.id
LIMIT 0 , 30
) t1
CROSS JOIN (
SELECT SUM(voteCount) totalvoteCount
FROM (
SELECT p.id,COUNT( r.poll_option_id ) AS voteCount
FROM poll_options AS p
LEFT JOIN poll_responses AS r ON ( r.poll_option_id = p.id )
WHERE p.poll_id =1
GROUP BY p.id
LIMIT 0 , 30
) t
) t2
输出如下
id poll_id caption voteCount totalvoteCount
1 1 32 1 2
2 1 256 1 2
3 1 512 0 2
在您的示例中, voteCount
代表每个组的计数。 如果要对所有组进行计数,则可以省略group by
子句(如果您的选择仅包含一个count
,则这是合法的)。
SELECT COUNT(r.poll_option_id)
FROM poll_options AS p
LEFT JOIN poll_responses AS r ON (r.poll_option_id = p.id)
WHERE p.poll_id =1
要么
SELECT p. * , COUNT( r.poll_option_id ) AS voteCount,
(SELECT COUNT(r.poll_option_id)
FROM poll_options AS p
LEFT JOIN poll_responses AS r ON (r.poll_option_id = p.id)
WHERE p.poll_id =1) totalVoteCount
FROM poll_options AS p
LEFT JOIN poll_responses AS r ON ( r.poll_option_id = p.id )
WHERE p.poll_id =1
GROUP BY p.id
LIMIT 0 , 30
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.