#sql
Вопрос:
У меня есть следующая таблица. Мне нужен SQL для суммы продаж в 2016 году в евро? Я пытаюсь выполнить следующий код, но получаю синтаксическую ошибку!
Select
sum (quantity * price),
case
when lower(currency) = pound
then set price = 1.1 * price
end
from
order_items
where
year(order_date) = 2016;
Order_Items:
order_item_key | ключ заказа | дата заказа | пользовательский ключ | prime_status | Количество | Цена | Валюта |
---|---|---|---|---|---|---|---|
xyz | ксп | 2020-06-01 | 123abc456 | 0 | 1 | 35 | фунт |
азбука | sdl | 2019-08-15 | 567fjs290 | 1 | 2 | 2.3 | Евро |
wrt | тер | 2016-08-15 | 567fjs460 | 1 | 2 | 2.3 | Евро |
тю | qwe | 2016-08-15 | 567fjs350 | 1 | 3 | 4.3 | Евро |
Комментарии:
1. Несколько вещей: (1) фунт-это строка, поэтому вам нужно ссылаться на нее как на строку в вашем операторе case. (2) Вам не нужно использовать «установленную цену». 1.1*цена достаточна.
2. Разве это не вопрос цитат? В своей 3-й строке вы написали:
when lower(currency) = pound then
и я предполагаю, что вы намеревались поставитьwhen lower(currency) = "pound" then
кавычки вокругpound
Ответ №1:
Как написано, pound
предполагается, что это столбец — вам нужно процитировать его как строковый литерал.
Кроме того, case
это выражение, которое возвращает значение, set
не является допустимым синтаксисом.
Select sum(quantity*price) as total,
price *
case
when lower(currency) = 'pound'
then 1.1 else 1 end as rate
from order_items
where YEAR(order_date) = 2016;
Комментарии:
1. Также необходима ГРУППА ПО.
Ответ №2:
Я думаю, что это лучше всего сделать с помощью подзапроса. В подзапросе вы сначала конвертируете любые цены «в фунтах» в евро. Внешний запрос вычисляет общий объем продаж за 2016 год в евро.
select sum(quantity*euro_price) as euro_sales_2016
from (
select quantity,
case when lower(currency) = 'pound'
then price * 1.1
else price
end as euro_price
from order_items
where YEAR(order_date) = 2016
) a;