Mysql sql聚合函数上的多个条件

Mysql sql聚合函数上的多个条件,mysql,Mysql,如何在sql聚合函数上按多个条件分组。例如,我有两个表Sales和Accounts ID | identifier_one | identifier_two | current_month | current_year 1 | 1 | A1 | 2 | 2 2 | 1 | B1 | 1 |

如何在sql聚合函数上按多个条件分组。例如,我有两个表
Sales
Accounts

ID  |  identifier_one  |  identifier_two  |  current_month  |  current_year
1   |       1          |       A1         |    2            |     2
2   |       1          |       B1         |    1            |     1 
销售

ID  |  identifier_one  |  identifier_two  | quantity | date
1   |       1          |       A1         |    1     |  2017-01-01
2   |       1          |       B1         |    1     |  2017-01-01
3   |       1          |       A1         |    1     |  2017-01-02
查询也应填充accounts表

账户

ID  |  identifier_one  |  identifier_two  |  current_month  |  current_year
1   |       1          |       A1         |    2            |     2
2   |       1          |       B1         |    1            |     1 
我有这个查询,但它只考虑
标识符\u one
,因此在本例中,账户中的两个条目都有
3
3

$sales = DB::select('SELECT
                            identifier_one,
                            SUM(IF(YEAR(`date`) = YEAR(CURDATE()), quantity, 0)) AS current_year,
                            SUM(IF(YEAR(`date`) = YEAR(CURDATE()) AND MONTH(`date`) = MONTH(CURDATE() ), quantity, 0)) AS current_month,
                            SUM(IF(YEAR(`date`) = YEAR(CURDATE()) - 1, quantity, 0)) AS last_year,
                            SUM(IF(YEAR(`date`) = YEAR(CURDATE()) AND MONTH(`date`) = MONTH(CURDATE()) - 1, quantity, 0)) AS last_month
                        FROM sales
                        GROUP BY identifier_one'); 

foreach ($sales as $sale) {

                    DB::table('accounts')
                        ->where([
                            ['identifier_one', '=', $sale->identifier_one]
                        ])
                        ->update([
                            'current_year'  => $sale->current_year,
                            'current_month' => $sale->current_month,
                            'last_month'    => $sale->last_month,
                            'last_year'     => $sale->last_year
                        ]);


                }

似乎您只需要将a和字段名添加到group by。 如果where子句需要更新以考虑这两个标识符,您可能还需要将标识符_two添加到select中。(可能)


也许我遗漏了什么,只是一个逗号和字段名int eh group by<代码>按标识符1、标识符2分组,如果你想在选择中添加标识符2,我想在更新时说我应该添加到
where()
子句
['identifier\u two','=',$sale->identifier\u two]
但总而言之,它似乎给所有3个都提供了相同的数量,我不明白这是怎么可能的。
GROUP BY identifier_one,identifier_two
将确保为identifier_one和identifier_two的每个唯一配对计算总和。在这种情况下,您应该只返回2行我认为问题是我需要两个条件来匹配并返回销售行“因此,当标识符和标识符都相同时,将所有销售相加,然后给我每个”销售“我们说的是同一件事。1、A1和1、B1是唯一的配对。1,A1加起来等于2和1,B1等于1。如果你得到3,那么出于某种原因,group by没有被执行。