У меня есть данные о супермаркете, и я хочу перечислить все филиалы супермаркетов в городе, а затем все отделы этого супермаркета, такие как продуктовый магазин, косметика. Составьте список продаж для каждого отдела и, наконец, рассчитайте общий объем продаж в каждом отделе. Поэтому мой ответ должен выглядеть примерно так, как показано ниже.
Я попробовал приведенный ниже запрос
SELECT branch, department, item , totalAmt
FROM project.dataset.table
GROUP BY branch, department
ORDER BY branch, department limit 100
Но это дает результат, как показано ниже:
Можно ли сгруппировать по филиалу и внутри этого отдела и получить результаты, подобные тем, что в первой таблице, с помощью BigQuery?
Мой ожидаемый результат - это первая таблица в вопросе, где она группируется по филиалам, а затем внутри нее группируется по отделам и отображает результат @ArtBindu.
Форматирование вывода должно выполняться в графическом интерфейсе приложения, а не в коде sql. Вы ожидаете от реляционной базы данных чего-то, чего она не может сделать очень просто. Пожалуйста, не добавляйте к своему вопросу случайные несвязанные теги.
Вы на 100% уверены, что результатом запроса у вас является вторая таблица? Для меня это не имеет никакого смысла, поскольку в инструкции SELECT есть 3 столбца. Содержимое третьего столбца на основе вашего запроса должно быть примерно таким: [{"item": "itemA", "totalAmt": 100}, {"item": "itemB", "totalAmt": 200}]
По мнению БД, это глупый вопрос ... @krishna
Используйте функции array_agg
и struct
после суммирования, чтобы получить общую сумму в подзапросе. См. ниже
создать образец набора данных
WITH ProductData AS (
SELECT 1 AS branch, 'Grocery' AS department, 'Rice' AS item, 150 AS Value UNION ALL
SELECT 1, 'Grocery', 'Wheat', 200 UNION ALL
SELECT 1, 'Cosmetics', 'Cream', 300 UNION ALL
SELECT 1, 'Cosmetics', 'Powder', 100 UNION ALL
SELECT 2, 'Grocery', 'Oil', 400 UNION ALL
SELECT 2, 'Grocery', 'Dal', 200 UNION ALL
SELECT 2, 'Cosmetics', 'Serum', 150 UNION ALL
SELECT 2, 'Cosmetics', 'Shampoo', 100 union all
SELECT 1, 'Grocery', 'Wheat', 99 UNION ALL
SELECT 1, 'Cosmetics', 'Cream', 33 UNION ALL
SELECT 1, 'Cosmetics', 'Powder', 11 UNION ALL
SELECT 2, 'Grocery', 'Oil', 44 UNION ALL
SELECT 2, 'Grocery', 'Dal', 22 UNION ALL
SELECT 2, 'Cosmetics', 'Serum', 15 UNION ALL
SELECT 2, 'Cosmetics', 'Shampoo', 13
)
чтобы получить желаемые результаты
SELECT branch,
department,
ARRAY_AGG(STRUCT(item AS item, total_amt AS amount)) AS items
FROM (
SELECT branch, department, item, SUM(value) AS total_amt
FROM ProductData
GROUP BY branch, department, item
)
ГРУППА ПО филиалу, отделу ЗАКАЗАТЬ ПО филиалу, отделу;
Результаты
Каков ваш ожидаемый результат? @Кришна