【问题标题】:how get the max of sum in access?如何获得访问中的最大值?
【发布时间】:2020-04-23 08:43:35
【问题描述】:

我想在这段代码中返回 Sum(units_sold) 的最大值

SELECT dim_product.product_name, Sum(fact_sales.units_sold) AS 
SumOfunits_sold
FROM dim_product 
INNER JOIN fact_sales 
ON dim_product.product_code = fact_sales.product_code
GROUP BY dim_product.product_name
ORDER BY Sum(fact_sales.units_sold) DESC;

但我不能这样做我尝试通过这种方式使用限制

SELECT dim_product.product_name, Sum(fact_sales.units_sold) AS 
    SumOfunits_sold
    FROM dim_product 
    INNER JOIN fact_sales 
    ON dim_product.product_code = fact_sales.product_code
    GROUP BY dim_product.product_name
    ORDER BY Sum(fact_sales.units_sold) DESC limit 1;

但这对我来说没什么用......

【问题讨论】:

  • 按 SumOfunits_sold desc limit 1 尝试下单;
  • 我这样做了,但它对我不起作用,只是一个问题我可以在 MS 访问中使用限制吗?
  • 您使用的是哪个数据库?
  • 我使用 Microsoft access ,我是通过 add (TOP 1) 做到的,但我可以同时获得第一条和最后一条记录吗?我想获得 Sum(fact_sales.units_sold) 的最大值和最小值,我该怎么办?

标签: sql ms-access select


【解决方案1】:

既然你说:

我想在这段代码中返回Sum(units_sold)的最大值...

如果您只想要所有组的总和的最大值和/或最小值,您也可以使用子查询,如下例所示:

select min(q.s) as minsold, max(q.s) as maxsold from
(
    select d.product_name, sum(f.units_sold) as s
    from dim_product d inner join fact_sales f on d.product_code = f.product_code
    group by d.product_name
) q

【讨论】:

  • 非常感谢您的帮助,它对我的​​工作正确,感谢您先生的帮助
  • 但我有一个问题,如何使用此代码选择产品名称?我想在结果中显示最大值和最小值的 product_name 我如何从您的代码中做到这一点
【解决方案2】:

也许你打算在这里使用TOP

SELECT TOP 1 dp.product_name, SUM(fs.units_sold) AS SumOfunits_sold
FROM dim_product dp
INNER JOIN fact_sales fs
    ON dp.product_code = fs.product_code
GROUP BY
    dp.product_name
ORDER BY
    SUM(fe.units_sold) DESC;

LIMIT 不是 ANSI SQL 标准的一部分,尽管它被一些数据库支持,例如 MySQL、SQLite 和 Postgres。

如果您还想返回总和最小的记录,那么一种简单的方法是将与另一个查询联合起来找到最小值:

-- query from above
UNION ALL
SELECT TOP 1 dp.product_name, SUM(fs.units_sold) AS SumOfunits_sold
FROM dim_product dp
INNER JOIN fact_sales fs
    ON dp.product_code = fs.product_code
GROUP BY
    dp.product_name
ORDER BY
    SUM(fe.units_sold);

【讨论】:

  • 哦,非常感谢先生,它对我有用,非常感谢您...但是我可以同时获得第一张和最后一张唱片吗?我想获得 Sum(fact_sales.units_sold) 的最大值和最小值,我该怎么办?请
  • @sandra 一种方法是与一个非常相似的查询合并,找到最小总和。
  • 哦,非常感谢您的帮助,谢谢您的回答
【解决方案3】:

在 MS-Access 中,LIMIT 的等价物是 TOP -- 但 TOP 实际上是 TOP WITH TIES

因此,您需要做一些事情来确保在存在平局时只返回一行。为此,只需包含第二个排序键:

SELECT TOP (1) dim_product.product_name, Sum(fact_sales.units_sold) AS 
SumOfunits_sold
FROM dim_product INNER JOIN
     fact_sales 
     ON dim_product.product_code = fact_sales.product_code
GROUP BY dim_product.product_name
ORDER BY Sum(fact_sales.units_sold) DESC,
         dim_product.product_name;

这保证返回一行——就像LIMIT 一样。

【讨论】:

  • 非常感谢您的帮助,它对我的​​工作正确,感谢您先生的帮助
猜你喜欢
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
相关资源
最近更新 更多