【问题标题】:Find the areaid that sells most number of products but with less discount查找销售产品数量最多但折扣较少的区域标识
【发布时间】:2014-10-15 16:25:26
【问题描述】:

我对 SQL Server 还是很陌生。

我有一个关于我正在尝试提出的查询的问题

我有一张这样的桌子:

pid areaid units discount 
-------------------------
1    1      10    10%
2    1      20    10%
3    2      30    5%
4    2      40    15%
5    1      50    10%
6    3      10    0%

我正在寻找销售最多产品(单位)但折扣较少的areaid

我尝试了一些如下查询,但我找不到加入以下 2 个查询的方法。

我能够使用以下查询找到最低折扣

select 
    min(y.discount) 
from
   (select 
        sum(discount) as discount 
    from 
        productinfo 
    group by 
        areaid) y

但不确定如何获取与该聚合折扣对应的区域 ID。

同样,我想出了一个查询来返回由 areaid 聚合的最大产品数量

select 
    max(y.uomsum) 
from
    (select 
         sum(uom) as uomsum 
     from 
         productinfo 
     group by 
         areaid) y

如果有人能帮我解决这个问题,那就太好了。

【问题讨论】:

  • 如果您发布您的示例数据的预期结果,那也很棒
  • 你找到答案了吗?

标签: sql sql-server aggregate-functions


【解决方案1】:
select  areaid, MAX(TotalUnits), MIN(TotalDiscount)
FROM
(
select areaid , SUM(units) as TotalUnits, SUM(discount) TotalDiscount
from Table1
group by areaid
)T
group by areaid

【讨论】:

  • 为什么使用TOP 1 而不使用ORDER BY?。你也已经被areaid分组了,再分组有什么意义?
【解决方案2】:

可能是这样的

SELECT MIN(Y.Discount),MAX(Y.Units) 
FROM
    (SELECT AreaID,SUM(Discount) AS Discount ,SUM(units) as Units
     FROM productinfo 
     GROUP BY Areaid
    ) Y

【讨论】:

    【解决方案3】:

    在我看来,您需要计算每个区域折扣的平均折扣,然后求和。

    Select
      sum(discountedUnits), areaid
    from (    
        select
          sum(units) as units,
          sum(units) * (1-(convert(float, discount)/100)) as discountedUnits, 
          convert(float, sum(units) * (1-(convert(float, discount)/100))) / sum(units) as averageUnit,  
          areaid, 
          discount
        from
          productinfo
        group by areaid, discount) as g
    group by areaid
    

    Here's a fiddle

    要获得最大值,你可以做一个前 1 并按降序排列,或者把它全部放在另一个子选择中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2019-12-03
      • 2021-11-16
      • 1970-01-01
      相关资源
      最近更新 更多