mysql group by返回_MYSQL:如何在mysql GROUP BY查询中返回所有不...

在MySQL中,使用GROUP BY和HAVING子句试图筛选出每个name组中g2最大值为0的所有行,但结果只返回了每组的第一行。问题讨论了如何正确地获取所有匹配条件的不同行,以及可能的MySQL设置和SQL_MODE的影响。期望的查询结果应该包含所有name下g2为0的行。
摘要由CSDN通过智能技术生成

我有表T和一些列和值

T

========================

id | name | g1 | g2

=========================

10 | abc | 1 | 1

14 | abc | 1 | 0

33 | abc | 1 | 0

42 | def | 1 | 0

52 | def | 1 | 1

63 | def | 2 | 0

66 | def | 2 | 0

67 | def | 2 | 0

74 | def | 1 | 0

我想用group by子句选择所有distict行

我的疑问是

select *

from T

group by name

having max(g2) = 0

我的预期结果是

========================

id | name | g1 | g2

=========================

14 | abc | 1 | 0

33 | abc | 1 | 0

42 | def | 1 | 0

63 | def | 2 | 0

66 | def | 2 | 0

67 | def | 2 | 0

74 | def | 1 | 0

**我添加了max(g2)因为我需要在每个组中添加where子句. :D谢谢你的答案.我需要聚合来限制返回(having子句).另一种解决方法是使用子查询

我的MySQL只返回每组的第一行

========================

id | name | g1 | g2

=========================

14 | abc | 1 | 0

42 | def | 1 | 0

忽略其他列(id和g1)的所有差异.

因为我记得使用其他DBMS(oracle和MsSQL,或MySQL),我可以期待我的查询返回上面的预期结果.返回所有不同的行.

或者是否有任何mySQL的设置要改变?

我已经尝试过SET sql_mode = ONLY_FULL_GROUP_BY,但它只是显示指定列的通知,在我的理解中,不在group by子句中指定列名是显示具有不同列值的所有行.

或者,是否需要指定sql_mode设置?或者至少为什么MySQL只返回一组的第一行???

set @@global.sql_mode= 'STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER'

set @@sql_mode=''

提前感谢您的任何回复……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值