MYSQL:如何在MYSQL GROUP BY查询中返回所有不同的行



我的表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子句

的区行

my query is

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),因为我需要对每个组创建add where子句。谢谢你的回答。我需要聚合来限制返回(有子句)。另一种方法是使用子查询

通过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=''

group by子句在任何dbms中都不用于此目的。

select * 
from T 
where g2 =0
order by name

这个查询应该满足您的目的

下面是GroupBy子句的简单解释。GroupBy子句通常用于聚合函数。http://www.w3schools.com/sql/sql_groupby.asp

试试这个-

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 |
+------+------+------+------+

相关内容

  • 没有找到相关文章

最新更新