1

groupbyを使用したステートメントを作成しました。今、私はすべてのレコードの詳細を知る必要がありますが、これを1つのステートメントで実行する必要があります。

例:次のクエリを実行して、で終わるファイルについてクエリを実行し_1、同じファイルを共有しnumberます。

SELECT番号、COUNT(*)sum domains ASFROMテーブル
WHEREファイルLIKE'%_1' GROUP BY number HAVING sum domains> 1

したがって、次の表がある場合:

domain      |   file      | Number 
------------------------------------     
aaa.com     | aaa.com_1   | 111
bbb.com     | bbb.com_1   | 222
ccc.com     | ccc.com_2   | 111
ddd.com     | ddd.com_1   | 222
eee.com     | eee.com_1   | 333
qqq.com     | qqq.com_1   | 333

クエリの結果は次のとおりです(number以上で共有され、この番号で終わり、共有されfileた(s)の数):file_1

number | sum domains
------------------------
222    | 2
333    | 2

私がする必要があるのは、ファイル名を印刷することです。私は欲しい:

number | file
------------------------
222    | bbb.com_1 
222    | ddd.com_1
333    | eee.com_1
333    | qqq.com_1

句では(s)group byを印刷できないため、どうすればこれを行うことができますか?file

4

1 に答える 1

1

元の行とファイル名を取得するために、サブクエリとしてメイン テーブルに対してクエリを返すことができJOINます。

SELECT 
  main.number, 
  main.file
FROM 
  table AS main
  /* Joined against your query as a derived table */
  INNER JOIN (
    SELECT number, COUNT(*) AS sum domains 
    FROM table
    WHERE RIGHT(file, 2) = '_1' 
    GROUP BY number 
    HAVING sum domains > 1
    /* Matching `number` against the main table, and limiting to rows with _1 */
  ) as subq ON main.number = subq.number AND RIGHT(main.file, 2) = '_1'

http://sqlfiddle.com/#!2/cb05b/6

LIKE '%_1'あなたをに置き換えたことに注意してくださいRIGHT(file, 2) = '_1'。ただし、ベンチマークがなければ、どちらが速いかを判断するのは困難です。

于 2012-12-16T01:26:46.163 に答える