首页 > 解决方案 > 当我将多个变量放在 SELECT 部分时,GROUP BY 部分不起作用

问题描述

我的表格如下:

store历史表

库存ID 库存日期 库存数量
1 2014-06-01 20
2 2014-06-15 45
3 2014-07-01 31
4 2014-07-15 24
5 2014-08-01 54
6 2014-08-15 76
7 2014-09-01 91
8 2014-09-15 24
9 2015-06-01 56
10 2015-06-15 82

我希望获得不同月份和年份的库存量

——线索一

SELECT InventoryAmount,
    YEAR(InventoryDate) AS Year, 
    MONTH(InventoryDate) AS Month
FROM storeHistory
GROUP BY Year AND Month
HAVING COUNT (InventoryAmount);

这会导致以下错误:

错误代码:1055。SELECT 列表的表达式#1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列 storeHistory.InventoryAmount;这与 sql_mode=only_full_group_by 不兼容...```

——轨迹二

SELECT COUNT(InventoryAmount) as Amount
FROM storeHistory
GROUP BY DATE_FORMAT(InventoryDate, '%Y-%m-%d ');

但是,这也不起作用。

标签: mysqlsql

解决方案


我建议使用这个版本,通过你当前的两个几乎正确的查询:

SELECT DATE_FORMAT(InventoryDate, '%Y-%m') ym, SUM(InventoryAmount) AS Amount
FROM storeHistory
GROUP BY ym;

您的两次尝试都有各种问题。查询的经验法则GROUP BY是,出现在SELECT子句中的每一列都必须是聚合,例如SUM(),或者也必须出现在GROUP BY.


推荐阅读