如何通过匹配一些冗余字段从3个表中获取唯一数据?

问题描述 投票:0回答:1

我一直在自己学习SQL,现在遇到这种情况。

我有3张桌子,

  • SALES(商品SKU,价格,客户电子邮件,公司名称)
  • [PRODUCTS(物料SKU,物料名称,物料类型)
  • CUSTOMER(客户电子邮件,姓名,部门,地址)

“样本数据”

注意:“销售”和“产品”中的“商品SKU”可以具有同一商品的多个实例。

我想从“ PRODUCTS”表中选择所有不同的SKU(而不是重复的条目),并将每个SKU与“ SALES”表进行匹配,以找到该产品的所有销售额。

ALSO

必须匹配表CUSTOMER中的“客户电子邮件”,并与SALES中的电子邮件进行匹配,并显示客户的“部门”和“地址”。

如果SALES中的“公司名称”与“ ABC公司”和“ DEF公司”匹配,则显示它们。

到目前为止,我已经设法从SALES和PRODUCTS中获取详细信息,但是根据公司名称,它们包括冗余SKU,并且我尚未连接CUSTOMER表。

SELECT "SALES".*,"PRODUCT"."Item SKU"
FROM  "SALES"
JOIN "PRODUCT" ON "SALES"."Item SKU"  = "PRODUCT"."Item SKU"  
WHERE    "Company Name"  LIKE '%ABC Company%'
OR  "Company Name"  LIKE '%DEF Company%'
ORDER BY "PRODUCT"."Item SKU" ASC ;

因此,总的来说,我需要从PRODUCT中获取唯一的“ Item SKU”,并与SALES中的唯一“ Item SKU”进行匹配,并将其与客户的“客户电子邮件”“部门”和“地址”一起显示。

sql
1个回答
0
投票

[好,这些不是最漂亮的,但它们应该完成工作:

`选择不同的p.sku,名称(从sku = p.sku的销售中选择总和(价格))从产品p哪里p.sku中(从销售中选择不同的sku)排序1

select distinct
    p.sku,
    ( select sum( price ) from sales where sku = p.sku and email = c.email ) as total,
    c.name,
    c.email,
    c.department,
    c.address
from
    products p,
    sales s,
    customer c
where
    p.sku = s.sku and
    s.email = c.email
order by
   1, 3

select distinct
    c.name,
    c.department,
    c.address,
    s.sku,
    ( select sum( price ) from t_sales where sku = s.sku and email = s.email )
from
    customer c,
    sales s
where
    c.email = s.email
order by
    1, 2, 4

`

© www.soinside.com 2019 - 2024. All rights reserved.