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

** 各グループに対して where 句を追加する必要があるため、max(g2) を追加しました。: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句は、どのデータベースでもこの目的で使用されていません。

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 に答える