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
我有以下查询:
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