繁体   English   中英

汇总查询结果

[英]Sum query results

我有这个查询,我得到了一些列的计数我的问题是在一个新字段中计算所有这些计数结果

SELECT 
CONCAT(u.firstname,' ',u.lastname) AS 'agent',
COUNT(CASE WHEN pa.answer_text LIKE '%yes%' THEN pa.answer_id END) AS yes,
COUNT(CASE WHEN pa.answer_text LIKE '%no%' THEN pa.answer_id END) AS NO,
COUNT(CASE WHEN l2u.lead_status_id IN (4,5,8,39) THEN l2u.lead_id END) AS pending,
COUNT(CASE WHEN l2u.lead_status_id IN (7,14,43) THEN l2u.lead_id END) AS wrong_number,

这是问题.. 正确的语法是什么

COUNT(pending + wrong_number + yes + NO) AS 'total'
FROM USER u, poll_votes pv, poll_answers pa, lead_to_user_original l2u

WHERE u.user_id = pv.user_id
AND pv.answer_id = pa.answer_id
AND l2u.lead_id = pv.vote_lead_id
AND (pa.answer_client_one = '869' OR pa.answer_client_two = '869')
AND pv.vote_date BETWEEN '2013-07-01 00:00:01' AND '2013-07-17 23:59:59'
GROUP BY u.user_id

将它包装在子查询中怎么样?

SELECT  agent,  yes, no, pending, wrong_number,
        yes + no + pending + wrong_number AS Total
FROM
        (
            SELECT  CONCAT(u.firstname,' ',u.lastname) AS 'agent',
                    COUNT(CASE WHEN pa.answer_text LIKE '%yes%' THEN pa.answer_id END) AS yes,
                    COUNT(CASE WHEN pa.answer_text LIKE '%no%' THEN pa.answer_id END) AS NO,
                    COUNT(CASE WHEN l2u.lead_status_id IN (4,5,8,39) THEN l2u.lead_id END) AS pending,
                    COUNT(CASE WHEN l2u.lead_status_id IN (7,14,43) THEN l2u.lead_id END) AS wrong_number
            FROM    USER u
                    INNER JOIN poll_votes pv 
                        ON u.user_id = pv.user_id 
                    INNER JOIN poll_answers pa 
                        ON pv.answer_id = pa.answer_id
                    INNER JOIN lead_to_user_original l2u 
                        ON l2u.lead_id = pv.vote_lead_id

            WHERE   (pa.answer_client_one = '869' OR pa.answer_client_two = '869')
                    AND pv.vote_date BETWEEN '2013-07-01 00:00:01' AND '2013-07-17 23:59:59'
            GROUP   BY u.user_id
        ) subA

您不能在SELECT的另一个字段中访问SELECT子句中的别名。 您可以将其“推送”到子查询,然后执行以下操作:

SELECT a.*, pending + wrong_number + yes + no AS 'total'
FROM (
    SELECT 
        CONCAT(u.firstname,' ',u.lastname) AS 'agent',
        COUNT(CASE WHEN pa.answer_text LIKE '%yes%' THEN pa.answer_id END) AS yes,
        COUNT(CASE WHEN pa.answer_text LIKE '%no%' THEN pa.answer_id END) AS NO,
        COUNT(CASE WHEN l2u.lead_status_id IN (4,5,8,39) THEN l2u.lead_id END) AS pending,
        COUNT(CASE WHEN l2u.lead_status_id IN (7,14,43) THEN l2u.lead_id END) AS wrong_number,
    FROM USER u
    JOIN poll_votes pv
      ON u.user_id = pv.user_id
    JOIN poll_answers pa
      ON pv.answer_id = pa.answer_id
    JOIN lead_to_user_original l2u
      ON l2u.lead_id = pv.vote_lead_id
    WHERE (pa.answer_client_one = '869' OR pa.answer_client_two = '869')
      AND pv.vote_date BETWEEN '2013-07-01 00:00:01' AND '2013-07-17 23:59:59'
    GROUP BY u.user_id
) AS a

我还将您的查询更改为使用“ANSI-92 样式”连接,我认为它更具可读性...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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