MYSQL:如何通过查询返回MYSQL组中所有不同的行
表T中有一些列和值MYSQL:如何通过查询返回MYSQL组中所有不同的行,mysql,group-by,sql-mode,Mysql,Group By,Sql Mode,表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 |
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
我想用GROUPBY子句选择所有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),因为我需要使addwhere子句针对每个组:D谢谢你的回答。我需要聚合来限制返回(having子句)。另一个解决方法是使用子查询
我的MySQL只返回每个组的第一行
========================
id | name | g1 | g2
=========================
14 | abc | 1 | 0
42 | def | 1 | 0
忽略其他列(id和g1)的所有差异
正如我记得使用其他DBMS(oracle和MsSQL,或MySQL)时,我可以期望我的查询返回上述预期结果。返回所有不同的行
或者mySQL是否有任何需要更改的设置
我已经尝试过设置sql\u mode=ONLY\u FULL\u GROUP\u BY,但它只是显示指定列的通知,据我所知,在GROUP BY子句中不指定列名就是显示具有不同列值的所有行
或者,是否需要指定任何sql_模式设置??或者至少为什么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=''
提前感谢您的回复…
group by
子句在任何dbms中都不用于此目的
select *
from T
where g2 =0
order by name
这个问题应该符合你的目的
下面是GroupBy子句的简单解释。GroupBy子句通常与聚合函数一起使用。
试试这个-
SELECT t1.* FROM t t1
LEFT JOIN (
SELECT name, g1, g2, MIN(id) id FROM t
GROUP BY name, g1, g2
HAVING COUNT(*) = 1
) t2
ON t1.name = t2.name AND t1.g1 = t2.g1 AND t1.g2 = t2.g2
WHERE t2.id IS NULL;
此查询将返回所有重复记录
我的输出是:
+------+------+------+------+
| 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 |
+------+------+------+------+