UJI*_*JIN 0 sql group-by google-bigquery
我有一个看似简单的问题。希望这不是一个骗局,我一直在寻找,但我找不到任何特别相似的东西。
我有一张看起来像这样的表:
+------+----------+--------+--------+
| id | group_id | fruit | color |
|------+----------+--------+--------+
| 1 | 1 | apple | red |
| 2 | 1 | orange | orange |
| 3 | 1 | banana | yellow |
| 4 | 2 | kiwi | golden |
| 5 | 2 | banana | yellow |
| 6 | 3 | orange | orange |
| 7 | 3 | peach | orange |
| 8 | 3 | grape | red |
| 9 | 3 | apple | green |
| 10 | 3 | kiwi | brown |
+------+----------+--------+--------+
Run Code Online (Sandbox Code Playgroud)
我只想检查每个组是否包含apple水果,从而得到如下表格:
+----------+------------+
| group_id | has_apple |
+----------+------------+
| 1 | true |
| 2 | false |
| 3 | true |
+----------+------------+
Run Code Online (Sandbox Code Playgroud)
经过一段时间后,我设法获得该结果的唯一方法是使用以下查询:
SELECT group_id,
MAX(temp) AS has_apple
FROM
(SELECT group_id,
MAX(IF(fruit='apple',true,false)) OVER (PARTITION BY group_id) AS temp
FROM t)
GROUP BY group_id
Run Code Online (Sandbox Code Playgroud)
好的,它有效......我希望它能够很好地概括,以便以我的方式提出更复杂的原始查询。我的问题是:
是否有更好/更薄/更简单的方法来获得相同的结果,也许只使用一个SELECT?
这是一种方法:
select group_id,
(countif( fruit = 'apple') > 0) as apple_flag
from t
group by group_id
Run Code Online (Sandbox Code Playgroud)