【问题标题】:Error GROUP BY Dates MysQL错误 GROUP BY 日期 MySQL
【发布时间】:2018-07-16 17:27:22
【问题描述】:

我正在尝试按日期对 2 个不同的表进行分组。但是,出了点问题,因为我无法按日期分组。

我有 2 个表格,第一个是“预算”,第二个是“按地区划分的销售业绩” 想法是显示所有月份(12 个月)的预算 每个月我们都有数据,我们将看到每个特定月份的销售额。

SELECT  
      BB.RG,
      BB.YEAR, 
      DATE_FORMAT( BB.MONTH, '%M' ) AS `MONTH`,
      SPR.Bookings,
      SPR.`Bookings PY`,
      SPR.Billing,
      SPR.`Billing PY`,
      SPR.`GP Amt`, 
      SPR.`GP Amt PY`, 
      SUM( BB.BUDGET ) AS BUDGET 
   FROM
      BRANCH_BUDGET BB
         LEFT JOIN  Sales_Performance_Region SPR
            ON BB.MONTH = SPR.MONTH
   WHERE
          BB.RG =  'FE'
      AND SPR.RG =  'FE'
      AND BB.YEAR =  '2018'
   GROUP BY
      BB.MONTH 

您可以在上面看到代码。由于我只有 2 个月的数据,而不是显示 12 个月,而是显示 1 月和 2 月。

我希望这个问题是有意义的。你能指导我吗?

【问题讨论】:

  • "Sales_Performance_Region.RG = FE" 有效地将其转换为INNER JOIN
  • 您通常按您选择的列进行分组,除了那些作为设置函数的参数的列。
  • 不 GROUP BY 所有非聚合列不是一个好习惯。您的代码甚至不会在任何其他 rdbms 中运行。这没有意义。

标签: mysql sql date group-by


【解决方案1】:

每当您在WHERE 语句或SELECT 语句you will need to treat everything inside the select statement as an aggregate 内的任何其他聚合函数之后调用GROUP BY,否则您将面临问题:

在您的代码中:

SELECT  `BRANCH_BUDGET`.`RG` ,  
        `BRANCH_BUDGET`.`YEAR` AS  `YEAR` , 
        `DATE_FORMAT(  `BRANCH_BUDGET`.`MONTH` ,  '%M' ) AS  `MONTH` , 
        `Sales_Performance_Region`.`Bookings` ,  
        `Sales_Performance_Region`.`Bookings PY` ,  
        `Sales_Performance_Region`.`Billing` , 
        `Sales_Performance_Region`.`Billing PY` ,  
        `Sales_Performance_Region`.`GP Amt` ,  
        `Sales_Performance_Region`.`GP Amt PY` , 
        SUM( `BRANCH_BUDGET`.`BUDGET` ) AS  `BUDGET` 
FROM (
      `BRANCH_BUDGET` 
       LEFT JOIN  `Sales_Performance_Region` ON (  `BRANCH_BUDGET`.`MONTH` =  
       `Sales_Performance_Region`.`MONTH` )
       )
WHERE  `BRANCH_BUDGET`.`RG` =  'FE'
        AND  `Sales_Performance_Region`.`RG` =  'FE'
        AND  `BRANCH_BUDGET`.`YEAR` =  '2018'
GROUP BY  `BRANCH_BUDGET`.`MONTH` 

您只能按BRANCH_BUDGET.MONTH 分组,但不要按任何其他列分组或对任何其他列执行聚合函数(保存BRANCH_BUDGET.BUDGET)。因此,您的输出是错误的,因为它只返回两个月。

【讨论】:

  • 谢谢,本杰明,但是,我只需要按月份分组,因为其余变量是相同的。如果我按分支分组,那么我将乘以不同分支的值。这是错误的。
【解决方案2】:

首先感谢 cmets 我想发布结果以防有人感兴趣。

问题是:我没有从两个表中加入区域 (RG)。所以结果应该类似于下面的代码:

SELECT  `BRANCH_BUDGET`.`RG` ,
`BRANCH_BUDGET`.`YEAR` AS  `YEAR` ,
DATE_FORMAT(  `BRANCH_BUDGET`.`MONTH` , '%M' ) AS  `MONTH` , 
`Sales_Performance_Region`.`Bookings` , 
`Sales_Performance_Region`.`Bookings PY` ,
`Sales_Performance_Region`.`Billing` , 
`Sales_Performance_Region`.`Billing PY` , 
`Sales_Performance_Region`.`GP Amt` , 
`Sales_Performance_Region`.`GP Amt PY` , 
SUM( `BRANCH_BUDGET`.`BUDGET` ) AS  `BUDGET` 
FROM (
 `BRANCH_BUDGET` 
LEFT JOIN  `Sales_Performance_Region` 
    ON (  `Sales_Performance_Region`.`MONTH` =  `BRANCH_BUDGET`.`MONTH` ) 
    AND (  `Sales_Performance_Region`.`RG` =  `BRANCH_BUDGET`.`RG` )
)
WHERE  `BRANCH_BUDGET`.`RG` =  'FE'
AND  `BRANCH_BUDGET`.`YEAR` =  '2018'
GROUP BY  `BRANCH_BUDGET`.`MONTH`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多