MySQL LEFT Join - 基于 <> 运算符输出

MySQL LEFT Join - outputting based on <> operator

我有以下查询:

SELECT t1.location AS Locations, COUNT( t1.location ) AS Total,
tab.Responses, tab.location AS tablocation
FROM  `trespondent_acme` t1
LEFT JOIN (

SELECT location, COUNT( location ) AS Responses
FROM  `trespondent_acme` 
WHERE completion_status
IN (
'Started',  'Complete'
)
GROUP BY location
)tab ON t1.location = tab.location
GROUP BY t1.location

这提供了(几乎)我正在寻找的输出。从本质上讲,它计算了 respondent table 中各个位置有多少人,然后还计算了其中有多少人从 results table 收到了回复。 =19=]

我要解开的地方是,如果他们对问题的回答不等于一个值,我只想计算 results table 中已经完成的那些 - MySQL 我使用的代码是这个

WHERE q13 <> 'OPTION'

我面临的问题是将这部分查询放在哪里以获得我需要的结果。顺便说一句,Q13 位于 results table 内。我试过的地方有:

SELECT t1.location AS Locations, COUNT( t1.location ) AS Total, 
tab.Responses, tab.location AS tablocation
FROM  `trespondent_acme` WHERE q13 <> 'OPTION' t1

但是上面给出了一个MySQL查询错误,我也试过在现有查询末尾的两组之前,但还是没有快乐。

编辑:我现在可以看到我在上面的查询中没有引用或 link tresults_acme,因为 Q13 位于此 table,这是我的第一个障碍。

欢迎任何建议。

我不确定你的描述,但对我来说,听起来你只对从子查询中添加计数感兴趣,如果它是启动器或已完成但不是 Q13 是 'option' .

如果是:-

SELECT t1.location AS Locations, 
    COUNT( t1.location ) AS Total,
    tab.Responses, 
    tab.location AS tablocation
FROM  `trespondent_acme` t1
LEFT JOIN 
(
    SELECT location, COUNT( location ) AS Responses
    FROM  `trespondent_acme` 
    WHERE completion_status = 'Started'
    OR (completion_status   = 'Complete'
    AND q13 != 'OPTION')
    GROUP BY location
)tab ON t1.location = tab.location
GROUP BY t1.location,
        tab.Responses, 
        tab.location AS tablocation

编辑

作为另一个 table 的结果,您需要在子查询中加入它并检查其中的值。但是,不知道您需要使用什么列来将 table 连接在一起:-

SELECT t1.location AS Locations, 
    COUNT( t1.location ) AS Total,
    tab.Responses, 
    tab.location AS tablocation
FROM  `trespondent_acme` t1
LEFT JOIN 
(
    SELECT a.location, COUNT( a.location ) AS Responses
    FROM  `trespondent_acme` a 
    INNER JOIN tresults_acme b
    ON a.common_column = b.common_column
    WHERE (a.completion_status = 'Started' AND b.q13 != 'OPTION')
OR (a.completion_status   = 'Complete'
AND b.q13 != 'OPTION')
    GROUP BY a.location
)tab ON t1.location = tab.location
GROUP BY t1.location,
        tab.Responses, 
        tab.location AS tablocation