Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 对于两个表,group by month仅返回4月份_Mysql - Fatal编程技术网

Mysql 对于两个表,group by month仅返回4月份

Mysql 对于两个表,group by month仅返回4月份,mysql,Mysql,现在我真的不知道我做错了什么。我认为这是一个相当简单的问题 表: operations: id processedon clientid 1 2018-01-01 9 2 2018-03-16 9 3 2018-04-21 9 4 2018-04-20 9 5 2018-05-09 9 items: id operation_id quantity unitprice

现在我真的不知道我做错了什么。我认为这是一个相当简单的问题

表:

  operations:
   id   processedon  clientid
   1    2018-01-01    9
   2    2018-03-16    9
   3    2018-04-21    9
   4    2018-04-20    9
   5    2018-05-09    9


  items:
   id   operation_id  quantity   unitprice
   1      1             10         2
   2      1             5          3
   3      2             20         4
   4      3             10         2
   5      4             8          4
   6      4             10         4
   7      5             2          2
操作/查询的预期结果为:

 month  total_value
  1      35
  3      80
  4      92
  5      4
这是基于数量*单价的。由于某些原因,它只返回month=4

SELECT 
    month(`operations`.`processedon`) AS `month`, 
    SUM((`items`.`quantity` * `items`.`unitprice`)) AS `total_value` 
FROM `items` 
INNER JOIN `operations` ON (`items`.`operation_id` = `operations`.`id`) 
GROUP BY 'month' 
ORDER BY 'month'

根据提供的信息,加入应该是

INNER JOIN operations ON items.operation_id = operations.id 
乙二醇


在group by子句中使用列别名不会提高效率,我宁愿避免在order by子句中使用它们。

以下查询将为您提供所需的答案

SELECT 
month(`operations`.`processedon`) AS `month`, 
SUM((`items`.`quantity` * `items`.`unitprice`)) AS `total_value` 
来自
项目
内部连接(
项目
操作
操作id=
操作
id
) 按月分组(
操作
处理
) 按月订购(
操作
处理时间

您需要正确指定月份,因为它不是现有列。 您将得到以下结果 月总价值

1 35
380

492


5 4

您正在按一个不存在的列进行分组
'month'
实际上是一个字符串,请用反勾号更改引号。按
顺序相同的事务id
似乎不在表中。至少在你的问题上不是这样。@JorgeCampos的评论应该会有很大的不同,而且“还不够奇怪”。单引号将字符串文字括起来。反勾号将列或表名括起来。如前所述,GROUP BY和ORDER BY子句将尝试为每一行使用文字值'MOUNT',而
MOUNT
将使用表达式中的值,该值应随行而异,有些值应相等。如需详细说明:如果您使用MOUNT(
操作
)它将返回与“2017-04-20”相同的“2018-04-20”值,并且将对同一月份的所有值进行分组,而不考虑年份。如果改用DATE_格式(
operations
processedon
,“%Y-%m”),它将仅将同一年和同一月份的数据分组在一起。看看:嗯,这取决于你打字的速度。我的速度很慢,因此效率提高更多noticeable@Strawberry少打字=好,所以我复制/粘贴。。。虽然这不是我评论的真正目的。有些人认为,如果使用列别名,处理过程实际上会减少,这在我的经验中是不正确的。有点离题,但使用表达式别名与表达式别名应该没有什么区别,因为任何一种方式都会成为表达式值的占位符。但是,如果要减少键入,请使用单个字母为每个表别名,以便
操作id
成为一个.code>操作id
1 35