• [Leetcode]585. 2016年的投资(MySQL)


    题目

    写一个查询语句,将 2016 年 (TIV_2016) 所有成功投资的金额加起来,保留 2 位小数。

    对于一个投保人,他在 2016 年成功投资的条件是:

    他在 2015 年的投保额 (TIV_2015) 至少跟一个其他投保人在 2015 年的投保额相同。
    他所在的城市必须与其他投保人都不同(也就是说维度和经度不能跟其他任何一个投保人完全相同)。
    输入格式:
    表 insurance 格式如下:

    Column Name Type
    PID INTEGER(11)
    TIV_2015 NUMERIC(15,2)
    TIV_2016 NUMERIC(15,2)
    LAT NUMERIC(5,2)
    LON NUMERIC(5,2)

    PID 字段是投保人的投保编号, TIV_2015 是该投保人在2015年的总投保金额, TIV_2016 是该投保人在2016年的投保金额, LAT 是投保人所在城市的维度, LON 是投保人所在城市的经度。

    样例输入

    PID TIV_2015 TIV_2016 LAT LON
    1 10 5 10 10
    2 20 20 20 20
    3 10 30 20 20
    4 10 40 40 40

    样例输出

    TIV_2016
    45.00

    解释

    就如最后一个投保人,第一个投保人同时满足两个条件:

    1. 他在 2015 年的投保金额 TIV_2015 为 '10' ,与第三个和第四个投保人在 2015 年的投保金额相同。
    2. 他所在城市的经纬度是独一无二的。

    第二个投保人两个条件都不满足。他在 2015 年的投资 TIV_2015 与其他任何投保人都不相同。
    且他所在城市的经纬度与第三个投保人相同。基于同样的原因,第三个投保人投资失败。

    所以返回的结果是第一个投保人和最后一个投保人的 TIV_2016 之和,结果是 45 。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/investments-in-2016
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题解

    聚合函数若作用只是筛选数据,而不需要作为查询结果的字段,则可以直接写在having语句中。

    代码

    # Write your MySQL query statement below
    select sum(TIV_2016) as TIV_2016
    from insurance
    where TIV_2015 in(
        select TIV_2015
        from insurance
        group by TIV_2015
        having count(*)>1
    ) and (LAT,LON) in(
        select LAT,LON
        from insurance
        group by LAT,LON
        having count(*) = 1
    )
    
  • 相关阅读:
    bash脚本入门
    DNS 递归查询
    场景题
    利用 python 发送邮件(qq 邮件)
    Swagger 简单使用
    Nginx支持HTTPS,生成SSL证书
    使用 Python 搭建简易HTTP服务器
    扫码登陆原理
    【积累】在jQuery.Validate额中使用可以传入参数的message
    关于RUBY处理多语言转字符编码的一点经验 nkf
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/12913525.html
Copyright © 2020-2023  润新知