我有一些列和值的表 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 子句选择所有不同的行
我的查询是
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 谢谢你的回答。我需要聚合来限制返回(有子句)。另一个解决方法是有子查询
通过我的 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=''
提前感谢您的任何回复...