Mysql 如何利用join制作简单的报表

Mysql 如何利用join制作简单的报表,mysql,sql,join,Mysql,Sql,Join,我有一个名为“PizzaData”的简单表,其中包含以下列: cust\u id整数不为空 bill\u日期整数不为空 pizza\u金额整数不为空 bill\u date(为了简化操作)是自交易完成以来经过的天数 我想做的是以下报告: 基本上,我熟悉和关键字,但我刚刚意识到MySQL不支持它。因此,我需要以某种方式生成一个临时列,并将其与PizzaData表连接起来 如何使用MySQL实现这一点?我认为使用case非常简单: select case when bill_date <= 2

我有一个名为“PizzaData”的简单表,其中包含以下列:

  • cust\u id整数不为空
  • bill\u日期整数不为空
  • pizza\u金额整数不为空
  • bill\u date
    (为了简化操作)是自交易完成以来经过的天数

    我想做的是以下报告:

    基本上,我熟悉
    关键字,但我刚刚意识到MySQL不支持它。因此,我需要以某种方式生成一个临时列,并将其与
    PizzaData
    表连接起来


    如何使用MySQL实现这一点?

    我认为使用
    case
    非常简单:

    select case when bill_date <= 29 then '0-29'
                when bill_date between 30 and 59 then '30-59'
                else '60+' end `interval`,
           sum(pizza_amt) `total_pizza_amt`
    from PizzaData
    group by case when bill_date <= 29 then '0-29'
                  when bill_date between 30 and 59 then '30-59'
                  else '60+' end;
    

    选择账单日期时的大小写我认为使用
    大小写很容易:

    select case when bill_date <= 29 then '0-29'
                when bill_date between 30 and 59 then '30-59'
                else '60+' end `interval`,
           sum(pizza_amt) `total_pizza_amt`
    from PizzaData
    group by case when bill_date <= 29 then '0-29'
                  when bill_date between 30 and 59 then '30-59'
                  else '60+' end;
    
    选择账单日期时的案例我将这样写:

    select (case when bill_date < 30 then '0-29'
                 when bill_date < 60 then '30-59'
                 else '60+'
            end) as bill_range,
           sum(pizza_amt) as total_pizza_amt
    from PizzaData
    group by bill_range
    order by min(bill_date);
    
    选择(账单日期<30时的情况,然后选择“0-29”
    当账单日期<60时,则为“30-59”
    其他“60+”
    结束)作为bill_范围,
    总额(比萨饼金额)作为比萨饼总金额
    来自PizzaData
    按票据范围分组
    最小订单(账单日期);
    
    注:

    • case
      表达式保证按顺序计算条件,因此不需要在
    之间使用
    
    
  • MySQL允许您在
    GROUPBY
    子句中使用列别名(并非所有数据库都这样做)
  • interval
    是MySQL关键字和保留字。该列有更好的名称
  • 排序依据
  • 保证结果的顺序是“逻辑”的
      我将这样写:

      select (case when bill_date < 30 then '0-29'
                   when bill_date < 60 then '30-59'
                   else '60+'
              end) as bill_range,
             sum(pizza_amt) as total_pizza_amt
      from PizzaData
      group by bill_range
      order by min(bill_date);
      
      选择(账单日期<30时的情况,然后选择“0-29”
      当账单日期<60时,则为“30-59”
      其他“60+”
      结束)作为bill_范围,
      总额(比萨饼金额)作为比萨饼总金额
      来自PizzaData
      按票据范围分组
      最小订单(账单日期);
      
      注:

      • case
        表达式保证按顺序计算条件,因此不需要在
    之间使用
    
    
  • MySQL允许您在
    GROUPBY
    子句中使用列别名(并非所有数据库都这样做)
  • interval
    是MySQL关键字和保留字。该列有更好的名称
  • 排序依据
  • 保证结果的顺序是“逻辑”的
    如何保存过去的天数?它会每天改变吗?你会每天更新吗?你如何保存过去的天数?它会每天改变吗?你能每天更新吗?非常感谢你,迈克!非常感谢你,迈克尔!