我有一个名为T的表,其中包含一些列和值。
我想用group by子句选择所有不同的行。
我的查询语句是:
我的期望结果将是:
我添加了max(g2),因为我需要对每个组进行where子句的添加:D谢谢你的回答。我需要聚合来限制返回(having子句)。另一个解决方法是使用子查询。
我的MySQL只返回每个组的第一行。
忽略其他列的差异(id和g1),据我记得在使用其他DBMS(如oracle、MsSQL或MySQL)时,我期望我的查询返回上述预期结果,即返回所有不同的行。是否有需要更改的MySQL设置?我已经尝试过
提前感谢您的任何回复...
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谢谢你的回答。我需要聚合来限制返回(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=''
提前感谢您的任何回复...