3

我有一些列和值的表 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=''

提前感谢您的任何回复...

4

2 回答 2

3

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

select * 
from T 
where g2 =0
order by name

此查询应符合您的目的

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

于 2011-11-16T05:25:46.407 回答
2

试试这个——

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 |
+------+------+------+------+
于 2011-11-16T08:23:17.577 回答