Получить условия таблицы SQL

#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.