SQL с бакетами для столбцов

Я пытаюсь написать запрос sql к столбцам, представляющим блоки данных:

Например, если мои данные:

title | value
A     | 1.2
A     | 2.3
B     | 0.5
B     | 0.8
B     | 1.7

И я хочу, чтобы мой результат выглядел так:

title | count(0-1) | count(1-2) | count(2+)
A     | 0          | 1          | 1
B     | 2          | 1          | 0

Мне удалось получить этот результат, написав несколько запросов, которые, например, включали:

WHERE value >= 0 AND value < 1

чтобы получить таблицу, представляющую каждую корзину, а затем объединить таблицы. Моя проблема в том, что я запрашиваю очень большую базу данных, поэтому выполнение нескольких запросов занимает много времени.

Есть ли автоматический способ сделать это в запросе sql?

Вы можете использовать View и оптимизировать базу данных с помощью indices.

dustytrash 14.09.2018 17:04
running multiple queries takes a long time. Вы уверены, что меньше запросов = больше скорости?
dustytrash 14.09.2018 17:05
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
843
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать условную агрегацию:

select title,
       sum(case when value >= 0 and value < 1 then 1 else 0 end) as bucket_0_1,
       sum(case when value >= 1 and value < 2 then 1 else 0 end) as bucket_1_2,
       sum(case when value >= 2 then 1 else 0 end) as bucket_2pl
from t
group by title;
Ответ принят как подходящий

Ты можешь сделать :

select title, 
       sum(case when value >= 0 and value < 1 then 1 else 0 end),
       sum(case when value >= 1 and value < 2 then 1 else 0 end),
       sum(case when value >= 2 then 1 else 0 end) 
from table t
group by title'

вариант использования, когда

select sum( case when value>=0 and value<1 then 1 else 0 end )
as b_0_1',
sum( case when value>=1 and value<2 then 1 else 0 end )as b_1_2,
sum( case when value>2 then 1 else 0 end ) as b_2 ,tittle
from t group by title

Другие вопросы по теме