Mysql 从两个表中选择sql查询

Mysql 从两个表中选择sql查询,mysql,sql,Mysql,Sql,您有两个表“成员”和“策略”。如果要求您编写一份报告,说明2014年12月期间购买保险的12-20岁、21-30岁、31-40岁和41岁以上年龄组的会员人数 假设您需要的所有字段都在表中;如何准备SQL语句以完成此任务。表字段如下所示(不一定是正确的名称) 成员表包含以下字段:生日(日期)、名字、姓氏 policies表中有以下字段policy\u start\u date(日期)、policy\u amount(十进制)、policy\u claim\u status(TINYINT)、pol

您有两个表“成员”和“策略”。如果要求您编写一份报告,说明2014年12月期间购买保险的12-20岁、21-30岁、31-40岁和41岁以上年龄组的会员人数

假设您需要的所有字段都在表中;如何准备SQL语句以完成此任务。表字段如下所示(不一定是正确的名称)

成员表包含以下字段:生日(日期)、名字、姓氏
policies表中有以下字段policy\u start\u date(日期)、policy\u amount(十进制)、policy\u claim\u status(TINYINT)、policy\u description(VARCHAR 160)

您能否澄清您的意思是prepare语句中的“prepare”,还是询问语法是什么

您可能希望将问题分解为许多子查询,如

  • 加入以下查询的顶级报告
  • 将成员的详细信息(如出生日期)提取到年龄段
  • 筛选在您的时间段中创建的策略

    • 这将给你一个开始

      select 
      sum(case when datediff(current_date(),birthDate)/365 between 12 and 20 then 1 else 0 end) as `age_12to20`,
      sum(case when datediff(current_date(),birthDate)/365 between 21 and 30 then 1 else 0 end) as `age_21to30`,
      sum(case when datediff(current_date(),birthDate)/365 between 31 and 40 then 1 else 0 end) as `age_31to40`,
      sum(case when datediff(current_date(),birthDate)/365 >40 then 1 else 0 end) as `age_over40`
      from members as m inner join policies as p
      on m.member_id=p.member_id
      where policy_start_date>='2014-12-01' and policy_start_date<'2015-01-01'
      
      选择
      求和(当datediff(当前日期(),生日)/365介于12和20之间时,则为1,否则为0结束)为“年龄12到20”,
      求和(当datediff(当前日期(),生日)/365介于21和30之间时,则为1,否则为0结束)为“年龄21到30”,
      求和(当datediff(current_date(),birthDate)/365介于31和40之间时,则为1,否则为0结束)为“age_31到40”,
      求和(当datediff(当前日期(),生日)/365>40时,则为1,否则为0结束)为“年龄超过40”`
      从作为m的成员到作为p的内部连接策略
      在m.member\u id=p.member\u id上
      
      其中政策开始日期>='2014-12-01'和政策开始日期非常感谢。你的回答确实使我在准备我需要的报告方面取得了进展。感谢其他人也响应了我的挑战。