Сколько каждого компонента составляет общее количество - PullRequest
0 голосов
/ 09 апреля 2019

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

Данные выглядят следующим образом.

+----+---------+-------+---------+
| ID | SOURCE  | MCODE | RELATED |
+----+---------+-------+---------+
| 1  | EMAIL   | A     | 40      |
+----+---------+-------+---------+
| 2  | EMAIL   | A     | 43      |
+----+---------+-------+---------+
| 3  | WEBFORM | C     | 40      |
+----+---------+-------+---------+
| 4  |         | A     | 40      |
+----+---------+-------+---------+
| 5  | WEBFORM | B     | 43      |
+----+---------+-------+---------+
| 6  |         | C     | 43      |
+----+---------+-------+---------+
| 7  |         | A     | 43      |
+----+---------+-------+---------+
| 8  | WEBFORM | D     | 43      |
+----+---------+-------+---------+
| 9  | EMAIL   | B     | 43      |
+----+---------+-------+---------+
| 10 |         | D     | 42      |
+----+---------+-------+---------+

Я хочу знать, сколько из каждого SOURCE составляет количествоMCODE для данного RELATED.

Например, результаты для связанных = 43 должны быть следующими:

+-------+---------+-------+
| MCODE | SOURCE  | COUNT |
+-------+---------+-------+
| A     | EMAIL   | 1     |
+-------+---------+-------+
| A     | UNKNOWN | 1     |
+-------+---------+-------+
| B     | EMAIL   | 1     |
+-------+---------+-------+
| B     | WEBFORM | 1     |
+-------+---------+-------+
| C     | UNKNOWN | 1     |
+-------+---------+-------+
| D     | WEBFORM | 1     |
+-------+---------+-------+

Это будет использоваться в диаграмме с накоплением примерно так

+---+---------+---------+
| A | EMAIL   | UNKNOWN |
+---+---------+---------+
| B | EMAIL   | WEBFORM |
+---+---------+---------+
| C | UNKNOWN |         |
+---+---------+---------+
| D | WEBFORM |         |
+---+---------+---------+

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

SELECT mcode, COUNT(mcode) as count
FROM docs
WHERE related = 43
GROUP BY mcode
ORDER By mcode ASC;

+-------+-------+
| MCODE | COUNT |
+-------+-------+
| A     | 2     |
+-------+-------+
| B     | 2     |
+-------+-------+
| C     | 1     |
+-------+-------+
| D     | 1     |
+-------+-------+
SELECT COALESCE(nullif(source,""),"unknown") AS source_document , COUNT(*) AS num
FROM docs 
WHERE related = 43
GROUP BY source_document
ORDER BY num DESC;

+-----------------+-----+
| SOURCE_DOCUMENT | NUM |
+-----------------+-----+
| webform         | 2   |
+-----------------+-----+
| unknown         | 2   |
+-----------------+-----+
| email           | 2   |
+-----------------+-----+

IВы читали некоторые другие сообщения, которые предполагают, что я мог бы присоединиться к столу на себя, чтобы получить этот результат?К сожалению, мои SQL-навыки не так сильны.

Вот скрипка с таблицей и моими запросами.

SQL Fiddle

1 Ответ

1 голос
/ 09 апреля 2019

Попробуйте:

SELECT MCODE, 
CASE WHEN SOURCE IS NULL THEN 'UNKNOWN'
     ELSE SOURCE 
END AS SOURCE, 
COUNT(RELATED) AS COUNT
FROM TEST
WHERE RELATED = 43
GROUP BY MCODE,SOURCE
ORDER BY 3

Дайте мне знать, работает ли он для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...