如何计算表中类似sql元素的汇总计算?

我在生成所需的SQL任务时遇到问题。

我的目标是对每个商品类别进行边际计算。该代码可以工作,但是在某些情况下,一个项目可能具有四个不同的成本,因此当我执行查询时,我得到了四行,每行都有保证金计算。我想要一个可以概括所有内容的文件。

我该怎么办?我尝试从开始的选择中删除成本,并在结束时进行分组,但是我收到一条错误消息,说它不是有效的按表达式分组。 如果可能的话,我想知道如何计算表中所有条目的利润,而不论它们的成本和价格如何。

SELECT 
  pc.product_description,round(li.price,2) as price,round(li.cost_price,2) as cost_price,SUM(li.quantity) as Total_Items_sold,round(SUM(li.quantity)*li.price-SUM(li.quantity)*li.cost_price,2) as Gross_Margin_$,FROM 
  product_description as pc
LEFT JOIN orders as li ON 
  pc.product_id = li.SKU
WHERE 
  pc.product_description = 'Sweater' and 
  li.state = 'complete' and 
  li.created_at like '2019%'
GROUP BY 
  pc.product_description,li.price,li.cost_price
JUNYUEQZZZ 回答:如何计算表中类似sql元素的汇总计算?

为您的方案创建一些虚拟数据:

create table product_description
(
    product_id varchar(10),product_description varchar(50)
)

create table orders
(
    SKU varchar(10),price decimal(10,2),cost_price decimal(10,quantity int,[state] varchar(10),created_at varchar(20) -- Ugly,but you're treating this as a string in your query
)

insert into product_description 
values 
('PRO001','Sweater'),('PRO002','Jeans'),('PRO003','Shoes'),('PRO004','Dress'),('PRO005','Blouse')

insert into orders
values
('PRO001',29.99,13.50,3,'complete','2019-11-19'),('PRO001',26.99,12.50,1,'2018-06-18'),37.99,20.75,2,'2019-11-17'),19.99,6.50,10,'2019-11-16'),6.25,5,'2019-11-15'),23.99,10.50,13,'2019-11-14'),21.00,'2019-11-13'),7,'incomplete','2019-11-12'),18.99,5.50,9,'2019-11-11'),39.99,23.50,18,11.50,23,'2019-11-10'),12,'2019-11-09')

在这些表中产生以下数据:

select * from product_description

/----------------------------------\
| product_id | product_description |
|------------|---------------------|
| PRO001     | Sweater             |
| PRO002     | Jeans               |
| PRO003     | Shoes               |
| PRO004     | Dress               |
| PRO005     | Blouse              |
\----------------------------------/

select * from orders

/------------------------------------------------------------------\
| SKU    | price | cost_price | quantity |   state    | created_at |
|--------|-------|------------|----------|------------|------------|
| PRO001 | 29.99 |   13.50    |     3    | complete   | 2019-11-19 |
| PRO001 | 26.99 |   12.50    |     1    | complete   | 2018-06-18 |
| PRO004 | 37.99 |   20.75    |     2    | complete   | 2019-11-17 |
| PRO003 | 19.99 |    6.50    |    10    | complete   | 2019-11-16 |
| PRO003 | 19.99 |    6.25    |     5    | complete   | 2019-11-15 |
| PRO002 | 23.99 |   10.50    |    13    | complete   | 2019-11-14 |
| PRO004 | 37.99 |   21.00    |     3    | complete   | 2019-11-13 |
| PRO001 | 29.99 |   13.50    |     7    | incomplete | 2019-11-12 |
| PRO003 | 18.99 |    5.50    |     9    | complete   | 2019-11-11 |
| PRO004 | 39.99 |   23.50    |    18    | complete   | 2019-11-11 |
| PRO005 | 19.99 |   11.50    |    23    | complete   | 2019-11-10 |
| PRO001 | 29.99 |   13.50    |    12    | complete   | 2019-11-09 |
\------------------------------------------------------------------/

我相信以下查询会为您提供所需的信息:

select
    pd.product_description as Product,sum((o.quantity * o.price) - (o.quantity * o.cost_price)) as GrossMargin
from orders o
left join product_description pd on o.SKU = pd.product_id
group by pd.product_description

结果:

/-----------------------\
| Product | GrossMargin |
|---------|-------------|
| Blouse  | 195.27      |
| Dress   | 382.27      |
| Jeans   | 175.37      |
| Shoes   | 325.01      |
| Sweater | 377.27      |
\-----------------------/

如果您想进一步过滤特定年份或特定产品的结果,则可以:

select
    pd.product_description as Product,sum((o.quantity * o.price) - (o.quantity * o.cost_price)) as GrossMargin
from orders o
left join product_description pd on o.SKU = pd.product_id
where o.created_at like '2019%'
and pd.product_description = 'Sweater'
group by pd.product_description

您会看到,但不包括2018年以后的订单:

/-----------------------\
| Product | GrossMargin |
|---------|-------------|
| Sweater | 362.78      |
\-----------------------/
本文链接:https://www.f2er.com/3078425.html

大家都在问