2016-02-17 2 views
0

Guys У меня есть четыре запроса:подсчета нескольких столбцов в запросе

Запрос # 1:

select 
satisfaction_score,count(satisfaction_score) as Satisfaction_count 
from j_survey_response 
where satisfaction_score != 0 
group by satisfaction_score 

Выход будет

satisfaction_score Satisfaction_count 
4       329 
5       859 

Запрос # 2:

select 
response_score,count(response_score) as response_count 
from j_survey_response 
where response_score != 0 
group by response_score 

ВЫХОД

response_score response_count 
3     42 
5     980 

Запрос № 3:

select 
responder_score,count(responder_score) as responder_count 
from j_survey_response 
where responder_score != 0 
group by responder_score 

ВЫХОД

responder_score responder_count 
4     236 
5     987 

Запрос # 4:

select 
service_score,count(service_score) as service_count 
from j_survey_response 
where service_score != 0 
group by service_score 

ВЫХОД

service_score service_count 
5     966 

Но мне нужен выход, как показано ниже

score satisfaction_count response_count responder_count service_count 
3   null     42   null    null 
4   329    null    236    null 
5   859     980    986    966 

Заранее спасибо

+0

Если вы хотите, рассмотрим следующие этой простой двухступенчатой ​​курс действий: 1 Если вы еще этого не сделали, укажите надлежащие DDL (и/или sqlfiddle), чтобы мы могли легче реплицировать проблему. 2. Если вы еще этого не сделали, укажите желаемый набор результатов, соответствующий информации, представленной на шаге 1. – Strawberry

+2

Выглядит довольно похоже на один из ваших предыдущих вопросов http://stackoverflow.com/questions/35431072/count-multiple -columns-in-one-query –

+0

Аналогично этому, но если это вернет только пятый столбец на этом входе –

ответ

0

Попробуйте это:

select score, 
     max(if(score_type='satisfaction_score',count,null)) as satisfaction_count, 
     max(if(score_type='response_score',count,null)) as response_count, 
     max(if(score_type='responder_score',count,null)) as responder_count, 
     max(if(score_type='service_score',count,null)) as service_count 
from (
    select score,count(satisfaction_score) as count,'satisfaction_score' as score_type from j_survey_response where satisfaction_score != 0 group by satisfaction_score 
    union all 
    select score,count(response_score) ,'response_score' as score_type from j_survey_response where response_score != 0 group by response_score 
    union all 
    select score,count(responder_score) ,'responder_score' as score_type from j_survey_response where responder_score != 0 group by responder_score 
    union all 
    select score,count(service_score) ,'service_score' as score_type from j_survey_response where service_score != 0 group by service_score 
) as scores 
group by scores.score 
Смежные вопросы