55876


## 質問

後述のサンプルデータでそれぞれのuser_idのfoodのユニーク数を知りたいのですが、どのようなSQLにすればよいでしょうか。

例えば下記の場合、  
user_id=1は3 (apple, banana,melon)  
user_id=2は1 (apple)  
というような結果を得たいと思っています。

どのようなSQLにすればよいでしょうか。

何かしらの言語で取得して、それを再度集計ということは行いたくなく、できるだけSQLだけで完結させたいです。よろしくおねがいします。

## テーブル

users

## レコード

id,user_id,food  
1,1,apple  
2,1,apple  
3,1,banana  
4,1,melon  
5,1,melon  
6,2,apple  
7,,,


CC BY-SA 4.0
2019-06-17T08:03:00.703
55875
2019-06-17T08:26:06.607
32428
question
mysql
MySQLのSQLで重複をのぞいた数をカウントしたい


`DISTINCT`で重複を取り除けるので、取り除いたフィールドを`count`すればいいかと思います。

[code]

    SELECT count( DISTINCT `food` ) FROM sample WHERE `user_id`=1;
    
[/code]

ユーザごとに纏めるのであれば、`GROUP BY`すると良いと思います。

[code]

    SELECT `user_id`, count( DISTINCT `food` ) FROM sample GROUP BY `user_id`;
    
[/code]

※サンプルデータと実行結果です。  
[![sample](https://i.stack.imgur.com/uskym.png)](https://i.stack.imgur.com/uskym.png)


CC BY-SA 4.0
2019-06-17T08:26:06.607
55876
2019-06-17T08:26:06.607
7676
55875
answer