【发布时间】:2011-11-16 05:20:04
【问题描述】:
我有一些列和值的表 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=''
提前感谢您的任何回复...
【问题讨论】: