1

如何在同一查询中使用wheregroup by

  SELECT `sales-store-id`,
  (SUM (`gen-acute-sales-after-returns`) + SUM(`gen- chronic-sales-after-returns`)) 
   AS `totalGenericSales` ,
  (SUM (`eth-acute-sales- after-returns`) + SUM(`eth-chronic-sales-after-returns`) + SUM(`others-sales- 
after-returns`))
 AS `totalEthicalSales` 
 FROM `sales` GROUP BY `sales-store-id` 
WHERE `date-s` BETWEEN '2018-09-01' AND '2018-10-01'

这给出了 SQL 错误,所以我尝试用AND代替WHERE ,但这也没有正确地对结果进行分组,它只给出了 2 个具有相同 ID 的结果

   SELECT `sales-store-id`,
      (SUM (`gen-acute-sales-after-returns`) + SUM(`gen- chronic-sales-after-returns`)) 
       AS `totalGenericSales` ,
      (SUM (`eth-acute-sales- after-returns`) + SUM(`eth-chronic-sales-after-returns`) + SUM(`others-sales- 
    after-returns`))
     AS `totalEthicalSales` 
     FROM `sales` GROUP BY `sales-store-id` 
    AND `date-s` BETWEEN '2018-09-01' AND '2018-10-01'

我在这里想念什么?

4

3 回答 3

7

WHERE子句应出现在GROUP BYSQL 语句中的子句之前。

SQL语言定义的子句顺序为:

  • 选择
  • 加入
  • 在哪里
  • 通过...分组
  • 拥有
  • 订购方式
  • 限制(MySQL 扩展)
于 2018-10-29T12:22:20.667 回答
1

我们不能在group by之后使用where子句。使用此查询

SELECT `sales-store-id`,
  (SUM (`gen-acute-sales-after-returns`) + SUM(`gen- chronic-sales-after-returns`)) 
   AS `totalGenericSales` ,
  (SUM (`eth-acute-sales- after-returns`) + SUM(`eth-chronic-sales-after-returns`) + SUM(`others-sales- 
after-returns`))
 AS `totalEthicalSales` 
 FROM `sales` 

date-s“2018-09-01”和“2018-10-01”之间分组sales-store-id

于 2018-10-29T12:24:42.540 回答
1

这些关键字应按层次顺序编写,如下所示:

SELECT, FROM, JOIN, WHERE, GROUP BY, HAVING,ORDER BY

 SELECT `sales-store-id`,
        (SUM (`gen-acute-sales-after-returns`) + SUM(`gen- chronic-sales-after-returns`)) 
     AS `totalGenericSales` ,
        (SUM (`eth-acute-sales- after-returns`) + SUM(`eth-chronic-sales-after-returns`) 
       + SUM(`others-sales-after-returns`)) 
     AS `totalEthicalSales`
   FROM `sales`
  WHERE `date-s` BETWEEN '2018-09-01' AND '2018-10-01'
  GROUP BY `sales-store-id`;
于 2018-10-29T12:30:50.943 回答