【问题标题】:SQL get the date with the least profit madeSQL获取利润最少的日期
【发布时间】:2021-11-27 12:02:09
【问题描述】:

目前我正在查询以获取利润最少的日期。我用来做这个的表就是这个:

我提出的查询找到了获利最少的日期,但没有显示当天所赚金额的总和:

SELECT MIN(PRICE*QUANTITY) AS UMSATZ, ORDER_DATE
FROM FACT_ORDER
GROUP BY ORDER_DATE
ORDER BY UMSATZ
LIMIT 1;

所以结果是:

哪个查询可以额外显示当天的利润总和(不是附加列)?非常感谢您!

【问题讨论】:

    标签: sql group-by sql-order-by snowflake-cloud-data-platform min


    【解决方案1】:

    哪个查询可以额外显示当天获利的 SUM 金额(不是附加列)?

    获取总数:

    SELECT DISTINCT ORDER_DATE,
         SUM(PRICE*QUANTITY) OVER(PARTITION BY ORDER_DATE) AS UMSATZ 
    FROM FACT_ORDER
    QUALIFY (PRICE*QUANTITY) = MIN(PRICE*QUANTITY) OVER(PARTITION BY ORDER_DATE);
    

    【讨论】:

    • 谢谢!我需要补充一点,我正在使用 Snowflake -sorry。它给了我一个“PARTITION”的语法错误。
    • @telarewa 它应该是给雪花的。有一个错字现在已修复
    • 哦,没错,现在可以使用了 - 谢谢!我添加了 Order By 和 LIMIT 1 以仅获得正确的第一行。
    • 我只是注意到它没有给我搜索的最小值,而是最大值。即使使用了 MIN 函数,我也无法得到最小值。你能帮我看看吗?
    • @telarewa 我需要使用无法重新创建您的案例的示例数据获取 CREATE TABLE。
    【解决方案2】:

    您可以通过自联接实现此目的。

    select umsatz, a.order_date, sumUmsatz from (
        select 
        min(price*quantity) as umsatz, order_date
        from FACT_ORDER 
        group by datum order by min(price*quantity)asc
    )a inner join (
        select sum(price*quantity) as sumUmsatz, order_date from 
        FACT_ORDER group by order_date
    ) b on a.order_date = b.order_date
    where rownum = 1;
    

    【讨论】:

    • 谢谢!我尝试了它并将 where rownum =1 替换为 LIMIT 1 以匹配 Snowflake SQL。但它给了我以下错误:SQL 编译错误:不明确的列名 'ORDER_DATE.
    • 我编辑了上面的解决方案。
    • 现在可以正常使用了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    相关资源
    最近更新 更多