2016-05-05 13 views
0

私はこのようなテーブルを持っている場合:mysqlにクエリがありませんか?

id  column1 column2 
1   A   A 
1   B   B 
1   C   A 
2   B   A 
2   B   C 
2   C   C 
3   D   C 
3   B   D 
3   E   D 

私はカラム1 = AまたはCOLUMN2 = Aが含まれていない個別のIDをカウントしているしたいです。

私のテーブルから、id1にはcolumn1 = A、column2 = A、id2、column2 = Aが含まれているので、count(distinct(id))は1にする必要があります。 id3は行にcolumn1!= Aまたはcolumn2!= Aを含まない唯一のIDです。

どのクエリを使用しますか? column1のは、「A」とCOLUMN2にdistincあるときに、あなたにIDによってグループ化された行の数を返します

+0

あなたの質問は不明です。 col1またはcol2に 'A'が含まれていない行は1ではありません。もっと詳しく説明できますか? –

答えて

1

あなたはこのような何かを行うことができますが、「B」に区別される:あなたの例で

SELECT COUNT(*) as cont 
FROM test 
WHERE column1 != 'A' AND column2 != 'A' 
GROUP BY id 

ことあなたを返します。

id cont 

1  1 
2  2 
3  3 

ID 1は良い値としてのみ(B、B)を持っているので、ID 2は(B、C)および(C、C)を有し、ID 3は良い値としてすべてを持っています。

ご希望の場合はお手数ですが、私がここで理解して何から

+0

あなたは 'FROM'ステートメントを逃しました –

+0

ありがとうございました。しかし私が欲しいのはselect count(distinct(id))クエリです。私は私の質問を編集 – dPdms

1

があるdistinct IDs

select count(distinct id) from test2 
where col1 !='A' AND col2 !='A' 

これはあなたを助けるかもしれない

+-------------------+ 
| COUNT(DISTINCTID) | 
+-------------------+ 
|     3 | 
+-------------------+ 
2

OUTPUT;)

SQL Fiddle

のMySQL 5.6スキーマ

CREATE TABLE SO_TEST (
    id int, 
    column1 char(2), 
    column2 char(2) 
); 

INSERT SO_TEST VALUES 
(1,'A','A'), 
(1,'B','B'), 
(1,'C','A'), 
(2,'B','A'), 
(2,'B','C'), 
(2,'C','C'), 
(3,'D','C'), 
(3,'B','D'), 
(3,'E','D'); 

クエリ1

SELECT COUNT(1) AS RESULT 
FROM (
    SELECT id, GROUP_CONCAT(CONCAT(CONCAT(column1,','),column2)) STR FROM SO_TEST GROUP BY id 
) TMP 
WHERE FIND_IN_SET('A',TMP.STR) = 0 

さて、それを説明しましょう。サブクエリで

  • 、私はグループIDとconcatそれらによってすべてcolumn1column2値を取得してきた、そしてそれは、私たちはその結果に従うと、あなたはsqlfiddleでそれを試すことができます返されます。

     
    +----+-------------+ 
    | id | STR   | 
    +----+-------------+ 
    | 1 | A,A,B,B,C,A | 
    | 2 | B,A,B,C,C,C | 
    | 3 | D,C,B,D,E,D | 
    +----+-------------+ 
    
  • だから、メインクエリでは、私はWHERE句でFIND_IN_SET(param1, param2)を使用し、この機能は私たちにPARAM2(PARAM2年代すべての要素は、カンマで区切る必要があります)でのparam1のインデックスを返し、場合しますparam1param2にはありませんので、WHEREについては明らかです。

  • 最後にcount(1)は、私たちが望むものを手に入れるのに役立ちます。

Results

| RESULT | 
|--------| 
|  1 | 
+0

偉大な答え。あなたもロジックについて説明できるなら、あなたに感謝するでしょう:) –

+0

@PirateX私は自分の答えを更新しました。 – Blank

関連する問題