简体   繁体   English

在一个查询中计算多列

[英]count multiple columns in one query

Guys i have four queries: 伙计们,我有四个疑问:

Query #1: 查询1:

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

The output will be 输出将是

satisfaction_score    Satisfaction_count
1                           5
2                           8
3                          97
4                         329
5                         859

Query #2: 查询2:

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

OUTPUT 输出值

response_score  response_count
1                    28
2                     8
3                    42
4                   250
5                   980

Query #3: 查询3:

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

OUTPUT 输出值

responder_score  responder_count
1                     24
2                      3
3                     30
4                    236
5                    987

Query #4: 查询#4:

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

OUTPUT 输出值

service_score    service_count
1                     22
2                      2
3                     34
4                    270
5                    966

But I need the output as below 但是我需要以下输出

score  satisfaction_count  response_count  responder_count  service_count
1            5                  28              24               22
2            8                   8               3                2
3           97                  42              30               34
4          329                 250             236              270
5          859                 980             986              966

You can UNION ALL the separate queries and apply conditional aggregation on the resulting set: 您可以UNION ALL单独的查询,并在结果集上应用条件聚合:

select score,
       max(case when type = 'satisfaction' then count end) as satisfaction_count,
       max(case when type = 'response' then count end) as response_count,
       max(case when type = 'responder' then count end) as responder_count,
       max(case when type = 'service' then count end) as service_count             
from (
  select satisfaction_score as score, 
         count(satisfaction_score) as count, 
         'satisfaction' as type
  from j_survey_response
  where satisfaction_score != 0
  group by satisfaction_score

  union all

  select response_score,
         count(response_score) as count, 'response' as type
  from j_survey_response
  where response_score != 0
  group by response_score

  union all

  select responder_score,
         count(responder_score) as count, 'responder' as type
  from j_survey_response
  where responder_score != 0
  group by responder_score

  union all

  select service_score,
         count(service_score) as count, 'service' as type
  from j_survey_response
  where service_score != 0
  group by service_score) as t
group by score

Move them in subqueries and join them by score columns. 将它们移动到子查询中,并按分数列将其加入。 Like this 像这样

select 
   q1.satisfaction_score as score,
   q1.satisfaction_count,
   q2.response_count,
   q3.responder_count ,
   q4.service_count,
from (query 1) q1
     join (query 2) q2 on q1.satisfaction_score=q2.response_score
     join (query 3) q3 on q1.satisfaction_score=q3.responder_score
     join (query 4) q4 on q1.satisfaction_score=q3.service_score

You Try this Sql Query 您尝试此Sql查询

select service_score , count(satisfaction_score) as Satisfaction_count,
count(response_score) as response_count,count(responder_score) as `responder_count,
count(service_score) as service_count from j_survey_response
where service_score != 0 and responder_score != 0 and response_score != 0 and satisfaction_score != 0`

if you use group by 如果您使用分组依据

select service_score , count(satisfaction_score) as Satisfaction_count,
count(response_score) as response_count,count(responder_score) as `responder_count,
count(service_score) as service_count from j_survey_response
where service_score != 0 and responder_score != 0 and response_score != 0 and satisfaction_score != 0` 
group by satisfaction_score,response_score,responder_score,service_score

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

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