【问题标题】:Find total revenue generated from "Male" customers in "Electronics" category? But output should display total revenue by prod_subcat在“电子”类别中查找“男性”客户产生的总收入?但输出应按 prod_subcat 显示总收入
【发布时间】:2019-10-15 18:41:47
【问题描述】:

我已经加入了 3 个表格,用于获取电子类别下每个子类别的总收入。

但在输出中,我不是为每个子类别获得特定收入,而是为每个子类别获得一个共同值(电子类别产生的总收入)。

select prod_subcat as subcat, sum(total_amt) as total_revenue
from transection
left join customer_details
  on transection.cust_id = customer_details.customer_ID
left join [dbo].[Product_cat_info]
  on [dbo].[transection].[prod_cat_code] = [dbo].[Product_cat_info].[Prod_Cat_cod]
where Gender like 'M' and prod_Cat in (
  select prod_Cat
  from [dbo].[Product_cat_info] 
  where prod_Cat like 'Electronics'
)
group by [prod_subcat]

我得到的输出是

     subcat               total_revenue

  Personal Appliances       5702069
  Mobiles                   5702069
  Computers                 5702069
  Audio and video           5702069
  Cameras                   5702069

【问题讨论】:

  • 如果还不算太晚,我建议您更改表的名称。交易中没有字母“e”。另外,为什么使用像'M'? ='M'怎么样。 Like 用于通配符搜索。当你知道你想要的值时,你应该使用 =。为了在这里真正提供帮助,我们需要一些细节。 minimal reproducible example
  • prod_Cat like 'Electronics' 应该是 prod_Cat = 'Electronics'
  • like 是一项昂贵的操作;如果您确定 prod_Cat = 'Electronics' 这样做。性别相同。将帮助您更快地获得所需的结果集。

标签: sql sql-server


【解决方案1】:

删除 IN 中的此子查询会导致更多重复,因为您已经加入此表并首先替换下面的查询,将 prod_cat 添加到 group by

 prod_Cat in (select prod_Cat from [dbo]. 
  [Product_cat_info] 
  where prod_Cat like 'Electronics')

and prod_Cat like 'Electronics'

【讨论】:

  • 您好先生,我尝试了您的建议,但输出仍然相同。
  • 我知道你忘记在 group by 中添加 prod_category
【解决方案2】:
 SELECT prod_subcat as subcat,
    gender, 
    sum(total_amt) as total_revenue
    from tbl_Tran T1
    left join tbl_Cust C1
      on T1.cust_id = C1.customer_ID
    left join Prod_cat_info P1
      on T1.prod_cat_code = P1.prod_cat_code
      and T1.prod_subcat_code=P1.prod_sub_cat_code
    where Gender like 'M' and prod_Cat in (
      select prod_Cat
      from Prod_cat_info 
      where prod_Cat like 'Electronics'
    )
    group by prod_subcat,Gender

用事务替换 tbl_tran 和 tbl_cust 与客户

【讨论】:

    【解决方案3】:
    SELECT SUM(TOTAL_AMT) AS TOTAL_AMT , prod_subcat  FROM DBO.prod_INFO   AS A
    LEFT JOIN DBO.Transactions AS B ON A.prod_cat_code =B.prod_cat_coDE AND A.prod_sub_cat_code 
    =B.prod_subcat_codE
    LEFT JOIN DBO.Customer AS C ON B.cust_id = C.customer_Id 
    WHERE PROD_CAT IN ('ELECTRONICS') AND GENDER = 'M'
    GROUP BY
    prod_subcat 
    

    WHERE 语句中不需要内联子查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多