繁体   English   中英

mysql连接两个表,计数和总和别名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM