Мне нужно выяснить, сколько из каждого компонента составляет общее количество.Это будет использоваться для построения гистограммы с накоплением.
Данные выглядят следующим образом.
+----+---------+-------+---------+
| 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