Считать как один с несколькими строками в mysql - PullRequest
0 голосов
/ 04 мая 2020

У меня есть следующая таблица, и я хотел бы получить результат в виде количества

Users   QuestionType    Question    Answer
User 1  Employment      Question 1      Yes
                        Question2       NULL

User 1  Job History     Question 3      Yes
                        Question 4      Yes
                        Question 5      No

User 1  Work Status     Question 6      null
                        Question 7      null

User 2  Job History     Question 3      Yes
                        Question 4      Yes
                        Question 5      No

User 2  Work Status     Question 6      yes
                        Question 7      yes

Результат

            Count of Users
Employment      1
Job History     2
Work Status     1

Как получить один счет для нескольких строк из mysql

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Это даст нам список типов вопросов

SELECT DISTINCT QUESTION_TYPE 
FROM TABLE_NAME

Это даст нам подсчет количества вопросов данного типа

SELECT QUESTION_TYPE, COUNT(*) AS COUNT
FROM TABLE_NAME
WHERE ANSWER IS NOT NULL
GROUP BY QUESTION_TYPE

Теперь мы можем присоединиться к ним вместе.

SELECT BASE.QUESTION_TYPE, COALESCE(CNT.COUNT,0) AS COUNT
FROM (
  SELECT DISTINCT QUESTION_TYPE 
  FROM TABLE_NAME
) AS BASE
LEFT JOIN (
  SELECT QUESTION_TYPE, COUNT(*) AS COUNT
  FROM TABLE_NAME
  WHERE ANSWER IS NOT NULL
  GROUP BY QUESTION_TYPE
) CNT ON BASE.QUESTION_TYPE = CNT.QUESTION_TYPE

Это дает количество ответов на вопросы, если вы хотите "количество пользователей", то вы должны изменить количество, чтобы выглядеть так:

SELECT QUESTION_TYPE, COUNT(USERS) AS COUNT
FROM TABLE_NAME
WHERE ANSWER IS NOT NULL
GROUP BY QUESTION_TYPE

Этот ответ сложнее, чем простая группа, потому что есть вероятность того, что будут типы вопросов, на которые никто не ответил. Если этого не произойдет, воспользуйтесь ответом Гордана.

0 голосов
/ 04 мая 2020

Если вы хотите, чтобы количество пользователей отвечало не на NULL:

select questiontype, count(distinct user_id)
from t
where answer is not null
group by questiontype;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...