У меня есть следующая таблица. в основном упрощенная версия моей таблицы. Мне нужно объединить несколько столбцов, я объясню, что я пытаюсь сделать, а также то, что я написал до сих пор.
tableName
food.id STRING NULLABLE
food.basket.id STRING NULLABLE
food.foodType STRING NULLABLE
food.price INTEGER NULLABLE
food.printed BOOLEAN NULLABLE
food.variations RECORD REPEATED
food.variations.id INTEGER REPEATED
food.variations.amount INTEGER NULLABLE
Sample data
id basket.id. foodType. price. printed. variations.id variations.amount
1. abbcd. JUNK. 100. TRUE. NULL. NULL
2. cdefg. PIZZA. 200. TRUE. 1234. 10
2345. 20
5678. 20
3. abbcd. JUNK. 200. FALSE. 1234. 10
4. uiwka. TOAST. 500. FALSE. NULL. NULL
вариации могут быть похожи на начинки для пиццы, каждая вариация имеет количество, скажем, вегетарианские ie начинки стоят 10 центов, а мясные начинки стоят 20 центов для простоты
, поэтому теперь я пытаюсь собрать некоторые данные для этой таблицы
Я пытаюсь получить
- количество напечатанных элементов (элементы, где print = TRUE)
- количество распечатанных элементов (элементы, где напечатано = FALSE)
- общая стоимость всех позиций
- общая цена всех вариантов
- общее количество уникальных корзин для определенного c foodType
Это запрос I иметь:
select SUM(CASE When item.printed = TRUE Then 1 Else 0 End ) as printed,
SUM(CASE When item.printed = FALSE Then 1 Else 0 End) as nonPrinted,
SUM(item.price) as price,
(select COUNT(DISTINCT(item.basket.id)) from tableName where itemType = "JUNK") AS baskets,
(select SUM(CASE when m.amount is NULL then 0 Else m.amount END) as variations_total from tableName, UNNEST(item.variations) as m) as variations
from tableName;
printed. unprinted. price. baskets. variations.
2. 2. 1000. 1. 60
Теперь я получаю тот результат, на который рассчитываю. Я пытаюсь понять, можем ли мы сделать это без использования подзапросов и использовать только соединения?