У меня, казалось бы, простой вопрос.Надеюсь, это не дурак, я искал, но не смог найти ничего похожего.
У меня есть таблица, которая выглядит следующим образом:
+------+----------+--------+--------+
| 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 |
+------+----------+--------+--------+
Я бы просто хотелпроверьте, содержит ли каждая группа фрукты apple
или нет, в результате получается таблица типа:
+----------+------------+
| group_id | has_apple |
+----------+------------+
| 1 | true |
| 2 | false |
| 3 | true |
+----------+------------+
После некоторого слишком много времени, единственный способ, которым мне удалось получить этот результатВот с этим запросом:
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
Хорошо, это работает ... и я надеюсь, что это обобщает достаточно хорошо, чтобы поставить на моем пути более сложный исходный запрос.Мой вопрос:
Есть ли лучший / более тонкий / простой способ получить тот же результат, возможно, используя только один SELECT
?