我有一个基本的键值表,其中包含每个用户的一些数据。使用更新的mysql进行分组时,其sql_mode
设置为only_full_group_by
(新的默认值)。当我尝试运行此简单查询时:
select * from user_features
where user_id = 1
group by feature_key
我收到以下错误:
SQL错误(1055):SELECT列表的表达式#1不在GROUP
BY子句中,并且包含未聚合的列’date.user_features.user_id’,该列在功能上不依赖于GROUP
BY子句中的列;这与sql_mode = only_full_group_by不兼容
对于此示例数据,我想基于进行分组feature_key
(group_concat
一旦修复了组错误,我将添加一个)。
| user_id | feature_key | feature_value |
+---------+-------------+---------------+
| 1 | color | red |
+---------+-------------+---------------+
| 1 | age | 15 |
+---------+-------------+---------------+
| 1 | color | blue |
+---------+-------------+---------------+
该表如下所示:
CREATE TABLE `user_features` (
`user_id` int(10) unsigned NOT NULL,
`feature_key` varchar(50) NOT NULL,
`feature_value` varchar(50) NOT NULL,
UNIQUE KEY `user_id_feature_key_feature_value` (`user_id`,`feature_key`,`feature_value`)
)
我可以运行哪个查询来解决此问题,或者需要添加什么索引?
这是MySQL用户的常见错误。在MySQL 5.7中,默认情况下,数据库会强制执行大多数其他SQL数据库多年来执行的标准语义。
规则是,选择列表中的每一列都必须是以下各项之一:
在您的查询中(我将扩展您的SELECT *
):
select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key
您正在按feature_key分组,但这意味着其他列不符合我上述的规则。
这是一种解决方法:
select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key
MAX(user_id)
由于WHERE子句条件可能只有一个值,因此使用起来似乎有些多余。但是也没有害处。MIN(user_id)
也可以。
创建表。( INT NOT NULL AUTO_INCREMENT, VARCHAR(45)为空, 主键()); 创建表。( 十进制(6,2)为空, 十进制(6,2)为空, VARCHAR(45)为空, 插入.(,,,)值(101、'joselin','1000','dexcity'); 插入.(,,,)值(102、“rusfal”,“0”,“donxes”);在.(,,,)中插入值(103、“r
问题内容: 有人知道如何避免以下代码的下一个警告吗? 问题答案: 如消息所示,请改用命名参数。
问题内容: 我想我正在解决这个问题,但是遇到了另一个障碍,并且不知道如何解决它 此查询有什么问题- 只需获取通用的“您有一个错误”,它指向联接,但我不知道如何解决它。我想要对customer_address_entity进行联接,因为它具有我需要在其中一条select语句中使用的另一个唯一ID。 问题答案: 首先,您的代码如下所示: 很明显,您在FROM之前有JOIN。 其次,您有一个带有unic
查询: 有人有解决办法吗?
在上次MySQL更新后,我一直在寻找一种方法来纠正我的查询。我知道Group By列不是唯一的,但我不知道如何更新查询以遵守严格的规则,并且仍然保留我要查找的结果。有人有什么建议吗? 我想简单地返回每个配置文件所做的最新帖子。例如,我的数据库看起来是这样的;
我有一个名为“弗兰克”的DynamoDB表,只有一个GSI。分区键称为PK,排序键称为SK,GSI分区键称为GSI1_PKGSI排序键称为GSI1_SK。我有一个存储实际数据的“数据”映射。 GSI分区键和排序键直接映射到表中具有相同名称的属性。 我可以运行partiql查询来获取图像中显示的结果。以下是PartIQ代码: 注意分区代码是如何多次引用“GSI1_SK”的。分区查询有效,并返回图像中