В приведенной ниже таблице, как бы я подсчитал, какой процент представляет собой стоимость еды на общую стоимость для каждого клиента? Глядя на умножение "Продовольственной стоимости" на 100, затем разделите "Общая стоимость". Например, клиент 1 вернул бы 39,5.
+------------+------------+--------+
| customerId | category | total |
+------------+------------+--------+
| 1 | Food Cost | 65031 |
| 1 | Total Cost | 164637 |
| 2 | Food Cost | 72031 |
| 2 | Total Cost | 264637 |
+------------+------------+--------+
SELECT round(total * 100 / (SELECT total FROM table where category = "Total
Cost" and customerId = 1), 2) as Total FROM table where category = "Food
Cost" and customerId = 1;
Это даст мне результат, который мне нужен для клиента 1, но если я хочу вернуть обоих клиентов, мне нужно будет удалить clientId = "", и это вернет ошибку MySQL "Код ошибки: 1242. Подзапрос возвращает больше этой 1 строки".
Вы можете использовать условную агрегацию здесь, чтобы получить информацию о еде и общей стоимости для каждого клиента:
SELECT
customerId,
100.0 * MAX(CASE WHEN category = 'Food Cost' THEN total END) /
MAX(CASE WHEN category = 'Total Cost' THEN total END) AS percentage
FROM yourTable
GROUP BY customerId;
Я закончил тем, что использовал это
SELECT ROUND(food.total * 100 / total.total, 1) AS 'Food Total'
FROM table AS food
INNER JOIN table as total on food.customerId = total.customerId
WHERE food.category = 'Food Cost'
AND total.category = 'Total Cost';