【问题标题】:How do I make max() function only out put a single row如何使 max() 函数只输出一行
【发布时间】:2021-04-02 13:49:11
【问题描述】:
Select MAX(end_contract-start_contract), job_description, employer_name
FROM contracts join jobs on contracts_job = jobs_id
              join employers on contracts_client = employer_id
WHERE contracts_end is not NULL
GROUP BY jobs_id,jobs_desc,employer_name

此查询当前输出:

MAX(end_contract-start_contract) jobs_desc        employer_name                      
-------------------------------- --------------- ------------------------------
                             153 Janitor         Microsoft              
                              80 Soldier         Microsoft              
                             119 UNDEFINED       USPS       
                             290 UNDEFINED       Microsoft              
                              89 Pilot           USNC                     
                             119 Cook            USNC                    
                             232 driver          USNC                     
                             340 Soldier         USMC 

我希望输出是:

MAX(end_contract-start_contract) jobs_desc        employer_name                      
-------------------------------- --------------- ------------------------------
                             340 Soldier         USMC 

这就是我使用 max() 的原因,但我不明白为什么它不只是显示最大值。我对 SQL 很陌生

【问题讨论】:

    标签: sql oracle datetime sql-order-by inner-join


    【解决方案1】:

    怀疑聚合在您的代码中没有做有用的事情。如果你想要最长的合约,你可以order byfetch

    select c.contract_end - c.contract_start as contract_days, j.desc, e.emp_name
    from contract c
    inner join job j on c.contract_job = j.job_id
    inner join employer e on c.contract_client = e.emp_id
    where c.contract_end is not null
    order by contract_days desc
    fetch first 1 row with ties
    

    【讨论】:

    • 当我用作“contract_days”时出现错误:ORA-00904:“CONTRACT_DAYS”:无效标识符 00904.00000 -“%s:无效标识符”
    • @Millidan。 . .当你在哪里使用它?在order by 子句中应该没问题。
    【解决方案2】:

    这可能更直观:

    Select CONTRACT_END-CONTRACT_START, JOB_DESC, EMP_NAME
    FROM CONTRACT join JOB on CONTRACT_JOB = JOB_ID
              join EMPLOYER on CONTRACT_CLIENT = EMP_ID
    WHERE CONTRACT_END is not NULL
    AND CONTRACT_END-CONTRACT_START=(Select MAX(CONTRACT_END-CONTRACT_START) FROM CONTRACT)
    

    【讨论】:

    • 我从您的解决方案中收到错误我不知道为什么 ORA-00936:缺少表达式 00936。00000 -“缺少表达式” *原因:*操作:第 5 行错误: 1
    • 我刚刚编辑了它。你必须把这些加一点盐。这个想法是存在的,但它可能是现在。我没有测试它。
    • 很抱歉你是对的,这是一个简单的编辑。现在可以使用了,谢谢。
    猜你喜欢
    • 2016-03-26
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多