首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><SQL Server>:>

<SQL Server>:>
EN

Stack Overflow用户
提问于 2019-08-27 16:17:58
回答 2查看 2.2K关注 0票数 1

关于这个问题,我有两张表,如下:

  • prod_cat_info --这个表有以下列:
    1. prod_cat :它包含产品的分类名称
    2. prod_cat_id :它包含产品的类别ID。请注意,每个产品类别都分配了一个唯一的ID。例如:假设我有以下产品类别:图书、体育、电子产品类别。因此,这三个产品类别将分别被指定为1,2和3的产品类别ID。
    3. prod_subcat :它包含产品的子类别
    4. prod_subcat_id :它包含产品的子类别ID

现在如何存储这个产品子类别。例如:假设产品类别为“书籍”,我有三个产品子类别,如“小说”、“教科书”和“小说”。因此,在这种情况下,每个产品子类别都会被分配一个ID,比如1,2,3等等。

  • 事务--这是另一个具有以下列的表:
    1. total_amt :它包含交易发生时由客户支付的金额。
    2. Qty :它包含由特定产品的客户订购的数量。
    3. prod_subcat_id :它包含产品的子类别ID
    4. prod_cat_id :它包含产品的类别ID。
    5. Cust_ID :如果出现这个问题,它包含了与客户ID无关的列

我所做的就是,我把这个问题分成两部分&写了两个独立的查询。查询如下。我无法找到如何加入这两个查询来实现输出。对于我的query1,我已经获取了所有的产品子类别。在query2 -我已经获得了前5种产品类别的数量基础上出售。

现在,我觉得Query2可以在WHERE子句中用作Query1中的子查询。但是它可能需要一些修改,因为我所知道的是orderby不能用于子查询&子查询的结果也是一个输出。

因此,我需要一些关于如何组合/修改这个查询以实现结果的帮助。

代码语言:javascript
复制
**Query1**
select P.prod_subcat as Product_SubCategory, 
AVG(cast(total_amt as float)) as Average_Revenue,
SUM(cast(total_amt as float)) as Total_Revenue
from Transactions as T
INNER JOIN prod_Cat_info as P
ON T.prod_cat_code = P.prod_cat_code AND T.prod_subcat_code = 
P.prod_sub_cat_code
group by P.prod_subcat

**Query2**
select top 5 P.prod_cat, sum(Cast(Qty as int)) AS Quantities_sold from
prod_cat_info as P
inner join Transactions as T
ON P.prod_cat_code = T.prod_cat_code AND P.prod_sub_cat_code = 
T.prod_subcat_code
group by P.prod_cat
order by sum(Cast(Qty as int)) desc
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-27 16:57:47

如果您有一个带有TOP操作符的ORDER BY,这正是您的情况,那么您可以在子查询中使用order。因为在本例中,ORDER BY用于确定TOP子句返回的行。对于多个值,可以使用IN运算符

代码语言:javascript
复制
select P.prod_subcat as Product_SubCategory, 
AVG(cast(total_amt as float)) as Average_Revenue,
SUM(cast(total_amt as float)) as Total_Revenue
from Transactions as T
INNER JOIN prod_Cat_info as P
ON T.prod_cat_code = P.prod_cat_code AND T.prod_subcat_code = 
P.prod_sub_cat_code
WHERE P.prod_cat_code IN (
select top 5 P.prod_cat_code
from prod_cat_info as P
inner join Transactions as T
ON P.prod_cat_code = T.prod_cat_code AND P.prod_sub_cat_code = 
T.prod_subcat_code
group by P.prod_cat
order by sum(Cast(Qty as int)) desc
)
group by P.prod_subcat
票数 1
EN

Stack Overflow用户

发布于 2022-10-07 10:05:43

代码语言:javascript
复制
Select prod_cat, prod_subcat , avg(total_amt) as average_amount , sum(total_amt) as total_amount
From transactions as t 
inner join prod_cat_info as p 
on t.prod_subcat_code=p.prod_sub_cat_code and t.prod_cat_code = p.prod_cat_code
Where prod_cat in 
(Select Top 5 prod_cat
From transactions as t 
inner join prod_cat_info as p 
on t.prod_subcat_code=p.prod_sub_cat_code and t.prod_cat_code = p.prod_cat_code
Where total_amt > 0  and qty > 0 
Group by prod_cat
Order by  count(qty) desc) 
Group by prod_subcat
Order by prod_cat asc;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57678727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档