我有表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=''
提前感谢您的任何回复……