【发布时间】:2020-05-08 01:59:36
【问题描述】:
我有下表。我的表的基本简化版本。我需要汇总几列,我将解释我正在尝试做什么以及我到目前为止所写的内容。
表名
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
变种可以像披萨浇头,每种变种都有数量,例如为简单起见,蔬菜浇头 10 美分,肉类浇头 20 美分
所以现在我正在尝试为这张表汇总一些数据
我正在努力获得
- 打印的项目数(打印的项目 = TRUE)
- 未打印的项目数(打印的项目 = FALSE)
- 所有项目的总成本
- 所有变体的总价
- 特定 foodType 的独特购物篮总数
这是我的查询:
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
现在我得到了我期望的结果。我想了解我们是否可以在不使用子查询并仅使用联接的情况下做到这一点?
【问题讨论】:
标签: sql join google-bigquery