来自同一列但不同条件的SQL计数获取所有列的稍后计数结果
我试图对不同条件下的同一列进行计数,但对其他条件也会得到稍后的计数结果 对于此sql:来自同一列但不同条件的SQL计数获取所有列的稍后计数结果,sql,Sql,我试图对不同条件下的同一列进行计数,但对其他条件也会得到稍后的计数结果 对于此sql: select count(eqa.ID) as gold_yes from EC_SECTION_ANSWER esa , EC_QUESTION_ANSWER eqa where esa.SC_NUMBER = 1079 and esa.ID = eqa.SC_ID and eqa.QU_ANSWER = 'Yes' and eqa.QU_TYPE = 'abc'; 我正在获得输出gold\u是:
select count(eqa.ID) as gold_yes from EC_SECTION_ANSWER esa , EC_QUESTION_ANSWER eqa
where esa.SC_NUMBER = 1079 and esa.ID = eqa.SC_ID and eqa.QU_ANSWER = 'Yes' and eqa.QU_TYPE = 'abc';
我正在获得输出gold\u是:
1
同样,如果我在不同的条件下运行sql:
select count(eqa.ID) as gold_no from EC_SECTION_ANSWER esa , EC_QUESTION_ANSWER eqa
where esa.SC_NUMBER = 1079 and esa.ID = eqa.SC_ID and eqa.QU_ANSWER = 'No' and eqa.QU_TYPE = 'abc';
我正在获取输出gold\u编号:
0
现在,如果运行sql组合:
select count(eqa.ID) as gold_yes ,count(eqa_2.ID) as gold_no from EC_SECTION_ANSWER esa , EC_QUESTION_ANSWER eqa ,EC_SECTION_ANSWER esa_2 , EC_QUESTION_ANSWER eqa_2
where esa.SC_NUMBER = 1079 and esa.ID = eqa.SC_ID and eqa.QU_ANSWER = 'Yes' and eqa.QU_TYPE = 'abc'
and esa_2.SC_NUMBER = 1079 and esa_2.ID = eqa_2.SC_ID and eqa_2.QU_ANSWER = 'No' and eqa_2.QU_TYPE = 'abc';
我正在获取输出:gold\u是:
0
和gold\u否:
0
。哪个应该是gold\u是:
1
和gold\u否:
0
谁能告诉我我犯了什么错误吗
提前谢谢 将
where
子句中的条件放入案例中
,并对其进行汇总
select sum(case when esa.SC_NUMBER = 1079
and eqa.QU_ANSWER = 'Yes'
and eqa.QU_TYPE = 'abc'
then 1
else 0
end) as gold_yes
...
from EC_SECTION_ANSWER esa
join EC_QUESTION_ANSWER eqa on esa.ID = eqa.SC_ID
查询中的
WHERE
条件是问题所在:您不能同时拥有eqa.QU\u ANSWER='Yes'
和eqa.QU\u ANSWER='No'
,因此查询返回0行,并且0行的值计数也为0
您可以将条件更改为或
,也可以在计数
中采用相同的条件,同时还应将查询更改为使用显式的联接
,而不是在WHERE
子句中写入联接条件
SELECT COUNT(CASE WHEN eqa.QU_ANSWER = 'Yes' THEN 1 ELSE NULL END) as gold_yes
, COUNT(CASE WHEN eqa.QU_ANSWER = 'No' THEN 1 ELSE NULL END) as gold_no
FROM EC_SECTION_ANSWER esa
INNER JOIN EC_QUESTION_ANSWER eqa ON esa.ID = eqa.SC_ID
WHERE esa.SC_NUMBER = 1079
AND eqa.QU_TYPE = 'abc';
试试这个:
SELECT SUM(CASE WHEN (esa.SC_NUMBER = 1079 and
esa.ID = eqa.SC_ID and
eqa.QU_ANSWER = 'Yes'and
eqa.QU_TYPE = 'abc')
THEN 1 END) AS eqacount1
SUM(CASE WHEN (esa.SC_NUMBER = 1079 and
esa.ID = eqa.SC_ID and
eqa.QU_ANSWER = 'No' and
eqa.QU_TYPE = 'abc')
THEN 1 END) AS eqacount2
from EC_SECTION_ANSWER esa , EC_QUESTION_ANSWER eqa
:
它会工作的,检查一下
问候,,
Praveen Nelge您已将连接条件移动到聚合函数中。这对性能来说真是个坏主意。
SELECT SUM(CASE WHEN (esa.SC_NUMBER = 1079 and
esa.ID = eqa.SC_ID and
eqa.QU_ANSWER = 'Yes'and
eqa.QU_TYPE = 'abc')
THEN 1 END) AS eqacount1
SUM(CASE WHEN (esa.SC_NUMBER = 1079 and
esa.ID = eqa.SC_ID and
eqa.QU_ANSWER = 'No' and
eqa.QU_TYPE = 'abc')
THEN 1 END) AS eqacount2
from EC_SECTION_ANSWER esa , EC_QUESTION_ANSWER eqa