#sql
#sql
Вопрос:
У меня есть эта таблица в SQL:
Дата | Цена | Количество |
---|---|---|
16/11/2020 | 45.2 | -1000 |
16/11/2020 | 45.2 | -500 |
17/11/2020 | 48 | 800 |
16/11/2020 | 46 | 200 |
16/11/2020 | 46 | 200 |
и мне нужен запрос, который возвращает сумму строк с количеством меньше нуля и больше нуля, разделенных и сгруппированных по дате. Запрос должен возвращать таблицу, подобную этой:
Дата | Цена | Количество |
---|---|---|
16/11/2020 | 45.2 | -1500 |
16/11/2020 | 46 | 400 |
17/11/2020 | 48 | 800 |
Я пытался использовать Group by, но у меня возникли трудности с этим.
Комментарии:
1. Я удалил несовместимые теги базы данных. Пожалуйста, помечайте только ту базу данных, которую вы действительно используете. Вы также должны показать свой atempt.
2. Вам действительно нужно разделять отрицательные и положительные стороны здесь, или мы можем сгруппировать только по дате и цене?
Ответ №1:
Глядя на описание, кажется, что вам нужна группа, основанная на отрицательных и положительных quantity
date
значениях.
Вы не пометили свой вопрос какой-либо базой данных, но вы можете использовать стандартный sql case .. when
следующим образом:
Select date, price, sum(quantity) as quantity
From your_table t
Group by date, price, case when quantity < 0 the 1 else 2 end;
Если вы не хотите, чтобы результат был сгруппирован к price
тому времени, вы можете удалить price
из group by
предложения и использовать max(price)
или любую агрегатную функцию в соответствии с вашим требованием в select
предложении.
Ответ №2:
Группируйте и считайте положительные и отрицательные числа отдельно. Затем объедините результаты вместе, используя ОБЪЕДИНЕНИЕ или ОБЪЕДИНЕНИЕ ВСЕХ.
Вы также можете отсортировать результат по своему усмотрению, заключив запрос в квадратные скобки для вложенного запроса — внутренний запрос для получения данных, внешний qyuery для фильтрации и сортировки.
select Date,Price, sum(Quantity)
from yourtable
where Quantity>0
group by Date,Price
union
select Date,Price, sum(Quantity)
from yourtable
where Quantity<0
group by Date,Price
или с результатом сортировки
select Date,Price, Quantity
from (
select Date,Price, sum(Quantity) as Quantity
from yourtable
where Quantity>0
group by Date,Price
union
select Date,Price, sum(Quantity)
from yourtable
where Quantity<0
group by Date,Price
) detail
order by Date, Quantity
Комментарии:
1. Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и / или почему он решает проблему, улучшит долгосрочную ценность ответа.
Ответ №3:
Я думаю, что это просто group by
. Разница в цене кажется достаточной. Нет необходимости разделять количества.
select date, price, sum(quantity)
from t
group by date, price;
Вот скрипка db<> .
Комментарии:
1. Я считаю, что в исходном вопросе отсутствует требование «количество меньше нуля и больше нуля». Для меня это означало бы отдельные результаты для положительных и отрицательных величин.
2. На самом деле я не думаю, что это необходимо, учитывая данные, предоставленные OP.