Приведенная таблица выглядит следующим образом.
+----+-------+-----+
| id | class | tag |
+----+-------+-----+
| 1 | 1 | aaa |
| 2 | 1 | abb |
| 3 | 1 | acc |
| 4 | 1 | baa |
| 5 | 2 | bbb |
| 6 | 2 | aaa |
+----+-------+-----+
Как рассчитать количество тегов, начинающихся с a
в пределах одного и того же класса для каждого класса в таблице? Результат приведенной выше таблицы будет:
+-------+---------+
| class | percent |
+-------+---------+
| 1 | 0.7500 |
| 2 | 0.5000 |
+-------+---------+
PS: у меня уже было решение, но таблица большая (несколько миллионов строк), не могли бы вы оптимизировать это?
SELECT class, (CAST(cnt_1 AS DECIMAL) / cnt_2) AS percent
FROM (
SELECT class, count(tag) AS cnt_1 FROM (
SELECT class, tag FROM t_test
WHERE tag LIKE 'a%'
) AS tmp1
GROUP BY class
) AS tmp2
NATURAL JOIN (
SELECT class, count(tag) AS cnt_2
FROM t_test GROUP BY class
) AS tmp3;