SQL-每日一题【1193. 每月交易 I】

这篇具有很好参考价值的文章主要介绍了SQL-每日一题【1193. 每月交易 I】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

Table: Transactions

SQL-每日一题【1193. 每月交易 I】,SQL每日一题,sql,算法,数据库

编写一个 sql 查询来查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数及其总金额。

以 任意顺序 返回结果表。

查询结果格式如下所示。

示例 1:

SQL-每日一题【1193. 每月交易 I】,SQL每日一题,sql,算法,数据库

SQL-每日一题【1193. 每月交易 I】,SQL每日一题,sql,算法,数据库 

 文章来源地址https://www.toymoban.com/news/detail-638988.html

解题思路

1.题目要求我们查找每个月和每个国家/地区的事务数及其总金额、已批准的事务数及其总金额。我们可以根据示例给出的输出结果表来进行查询。

2.在查询之前我们要弄清楚 sum() 和 count() 函数。

  • 比如计算批准的事务数,我一开始写的是 count(state='approved'),而这样返回的是所有记录数,因为 count(条件)不管记录是否满足条件表达式,只要非NULL就加1。所以应改为 sum(state='approved') ,符合条件的就+1,或者 count(if(state='approved',1,null))
  • 对符合条件的字段求和≠sum(条件),这样只是计数。

3.然后我们开始查询,我们先对记录进行分组,首先按照 month 分,再按 country 分,分好后的组内就是同一个国家在同一个月的记录。之后用 left()函数提取 trans_date 字符串的左边部分,也就是我们所需要的年和月。country 直接查询出即可。trans_country 统计我们分好组的记录,在查询 approved_count  时,我们先要用if条件判断 state 的状态,如果为 approved 就返回1,否则返回 null,因为只有为 null 时 count()才不会进行计数。

4.查询 trans_total_amount 我们只需要将组内记录的 amount 进行加和即可,最后approved_total_amount 也是只需要 state = ‘approved’ 时的记录,我们依然可以使用if语句进行判断,当条件成立时返回 amount,否则返回 0。

代码实现

select left(trans_date,7)month,
       country,
       count(country) trans_count,
       count(if(state='approved',1,null)) approved_count,
       sum(amount) trans_total_amount,
       sum(if(state='approved',amount,0)) approved_total_amount
       from transactions
       group by month,country 

测试结果

SQL-每日一题【1193. 每月交易 I】,SQL每日一题,sql,算法,数据库

 

到了这里,关于SQL-每日一题【1193. 每月交易 I】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL-每日一题【595.大的国家】

    World  表: 如果一个国家满足下述两个条件之一,则认为该国是 大国 : 面积至少为 300 万平方公里(即,3000000 km2),或者 人口至少为 2500 万(即 25000000) 编写一个 SQL 查询以报告 大国 的国家名称、人口和面积。 按 任意顺序 返回结果表。 查询结果格式如下例所示。 示例

    2024年02月13日
    浏览(34)
  • SQL-每日一题【550.游戏玩法分析Ⅳ】

    Table:  Activity 编写一个 SQL 查询,报告在首次登录的第二天再次登录的玩家的比率,四舍五入到小数点后两位。换句话说,您需要计算从首次登录日期开始至少连续两天登录的玩家的数量,然后除以玩家总数。 查询结果格式如下所示:   前置知识 1.ROUND() 函数 ROUND() 函数用于

    2024年02月13日
    浏览(38)
  • SQL-每日一题【1158. 市场分析 I】

    Table:  Users Table:  Orders   Table:  Items   请写出一条SQL语句以查询每个用户的注册日期和在  2019   年作为买家的订单总数。 以  任意顺序  返回结果表。 查询结果格式如下。 示例 1:   1.题目要求我们查询每个用户的注册日期和在  2019   年作为买家的订单总数。我们可以将

    2024年02月14日
    浏览(36)
  • SQL-每日一题【585.2016年的投资】

    Insurance  表: 请你编写一个 SQL 查询,报告 2016 年 (tiv_2016) 所有满足下述条件的投保人的投保金额之和: 他在 2015 年的投保额 (tiv_2015) 至少跟一个其他投保人在 2015 年的投保额相同。 他所在的城市必须与其他投保人都不同(也就是说 (lat, lon) 不能跟其他任何一个投保人完全

    2024年02月17日
    浏览(42)
  • SQL-每日一题【584.寻找用户推荐人】

    给定表  customer  ,里面保存了所有客户信息和他们的推荐人。 写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都  不是  2。 对于上面的示例数据,结果为:    1.题目要求查询列表中客户的推荐人的编号都  不是  2 和为 null 的客户。我们直接使用 where

    2024年02月13日
    浏览(36)
  • SQL-每日一题【1173. 即时食物配送 I】

     配送表:  Delivery 如果顾客期望的配送日期和下单日期相同,则该订单称为 「即时订单」,否则称为「计划订单」。 查询即时订单所占的百分比, 保留两位小数。 查询结果如下所示。 示例 1:     1.题目要求我们查询出顾客期望的配送日期和下单日期相同的记录所占百分比

    2024年02月14日
    浏览(40)
  • SQL-每日一题【1484. 按日期分组销售产品】

    表  Activities : 编写解决方案找出每个日期、销售的不同产品的数量及其名称。 每个日期的销售产品名称应按词典序排列。 返回按  sell_date  排序的结果表。 结果表结果格式如下例所示。 示例 1:     前置知识 group_concat函数的功能 将group by产生的同一个分组中的值连接起来

    2024年02月13日
    浏览(42)
  • SQL-每日一题【1068. 产品销售分析 I】

    销售表  Sales : 产品表  Product :   写一条SQL 查询语句获取 Sales 表中所有产品对应的 产品名称 product_name 以及该产品的所有 售卖年份 year 和 价格 price 。 查询结果中的顺序无特定要求。 查询结果格式示例如下:   1.题目要求我们查询出 Sales 表中所有产品对应的 产品名

    2024年02月15日
    浏览(44)
  • SQL-每日一题【1517. 查找拥有有效邮箱的用户】

    表:  Users 编写一个解决方案,以查找具有有效电子邮件的用户。 一个有效的电子邮件具有前缀名称和域,其中:   前缀  名称是一个字符串,可以包含字母(大写或小写),数字,下划线  \\\'_\\\'  ,点  \\\'.\\\'  和/或破折号  \\\'-\\\'  。前缀名称  必须  以字母开头。 域  为  \\\'@le

    2024年02月12日
    浏览(41)
  • 【Hive SQL 每日一题】统计用户连续下单的日期区间

    测试数据 需求说明 统计用户连续下单的日期区间,所以连续的下单日期必须 = 2 ,例如: 2023-01-01,2023-01-02 。 分析步骤如下: 按 user_id 、 order_date 进行分组,同天的下单日期只保留一条。 使用 row_number 窗口函数对行号进行标记。 使用 date_sub 函数与行号标记进行运算,如果

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包