0

IDのリストを持つデータセットがあり、それらのIDはカテゴリのリストです(したがって、各IDには多くのカテゴリがある場合があります)。カテゴリのリストを検索して、そのカテゴリ内にいくつの異なる ID があるか (カウント) を確認したいのですが、ID が 1 つのカテゴリでカウントされると、別のカテゴリではカウントされません。

例:

ID カテゴリ
1 ガソリンスタンド
1 コンビニ
1 床屋
2デイケア
2 ガソリンスタンド
3 コンビニ
3 ゴルフ練習場

したがって、ガソリン スタンドとコンビニエンス ストアのカウントを (この順序で) 検索すると、ガソリン スタンドはカウント 2 (ID 1&2) を取得し、コンビニエンス ストアはカウント 1 (ID 3) を取得します。

現在、私のクエリは次のようになります。

select category,distinct(id) from TABLE
where id in ('Gas Station','Convenience Store')
group by category 

そしてそれは私に与えるでしょう

ガソリンスタンド - 2
コンビニ - 2

そして、それは私が望むものではありません。望ましい出力:

ガソリンスタンド - 2
コンビニ - 1
4

2 に答える 2

1

この出力が必要な理由はあまり明確ではありませんが、技術的にはクエリで生成できます

SELECT category, COUNT(DISTINCT id) count
  FROM table1
 WHERE category = 'Gas Station'
UNION ALL
SELECT category, COUNT(DISTINCT id) count
  FROM table1
 WHERE category = 'Convenience Store' 
   AND id NOT IN
       (
         SELECT DISTINCT id
           FROM table1
          WHERE category = 'Gas Station'
       );

出力:

| | カテゴリー | カウント |
|------|-------|
| | ガソリンスタンド | 2 |
| | コンビニエンス ストア | 1 |

これがSQLFiddleのデモです

于 2013-09-06T22:50:25.063 に答える
1

更新しました

これを単一のSQLとして試してください:

SELECT Category
 ,COUNT(*)
 ,@ids:=CONCAT( @ids, ID, ',' )
 FROM Table1, (SELECT @ids:=',') ids
 WHERE Category IN ('Gas Station','Convenience Store')
 AND POSITION( CONCAT( ',', ID, ',' ) IN @ids ) = 0
 GROUP BY Category

http://sqlfiddle.com/#!2/2f026/12の SQLfiddle

更新しました

Ok。これを試して:

SET @ids:=',';
SELECT Category
      ,COUNT(*)
      ,@ids:=CONCAT( @ids, ID, ',' )
  FROM Table1
 WHERE Category IN ('Gas Station','Convenience Store')
   AND POSITION( CONCAT( ',', ID, ',' ) IN @ids ) = 0
 GROUP BY Category

@peterm の sqlfiddle ( http://sqlfiddle.com/#!2/2f026/1 ) を変更すると、結果は次のようになります。

CATEGORY             COUNT(*)   @IDS:=CONCAT( @IDS, ID, ',' )
Convenience Store    1          ,1,3,
Gas Station          2          ,1,
于 2013-09-06T23:16:51.927 に答える