2012-04-08 5 views
2

私は2つのテーブル:datafileを持つデータベースを持っています。SQLとの1対多の関係の子レコードの数を数える

file_idは、dataからfileへの外部キーです。したがって、dataからfileまでの関係はn対1です。

dataのレコードのうち、どれだけ多くのレコードがfileの各レコードを参照しているか調べるための方法はありますか?

例えば、私は、データの多くのレコードは、ID 13でファイルを参照する方法を見つけることができます:

select count(*) from data where file_id = 13; 

は、私はすべてのfile_idのためにこれを知ってほしいです。私はこれをachiveするには、以下のコマンドを試してみましたが、それはすべてのfile_idのレコードの数を与える:

mysql> select distinct file_id, count(*) from data where file_id in (select id from file); 
+---------+----------+ 
| file_id | count(*) | 
+---------+----------+ 
|  9 |  3510 | 
+---------+----------+ 

答えて

8

個別に戻り、行ごとに異なる値ではなく、あたりいくつかのグループ。 MySqlでは、グループ化せずに集計関数を使用することができますが、これはまったく誤解を招くことです。この場合、ランダムなfile_idとすべてのレコードの数が得られます。

はgroup by句の数(またはその他の集計関数)、使用のグループを取得するには:

select file_id, count(*) 
    from data 
group by file_id 
+0

をどのように考え、あなたの広告 'WHERE'' 'COUNT(*)と相互作用句?例えば。カウントが5より大きいカウントを選択しますか? – DogEatDog

+1

@DogEatDogグループの後にhaving句を追加しています: 'having count(*)> 5'。 –

3

GROUP BY ...

SELECT file_id, COUNT(*) 
    FROM data 
GROUP BY file_id 
2
select file_id, count(*) 
    from data 
group by file_id 
関連する問題