2012-04-08 64 views
2

我有一個包含兩個表的數據庫:datafile用SQL只計算一對多關係中的子記錄數

file_id是從datafile的外鍵。所以,從datafile的關係是n到1。

是否有一種方法只使用SQL來找出有多少記錄data是指每個記錄file

例如,我能找到多少數據記錄轉診編號13到文件:

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

我想知道這對每個file_id的。我想下面的命令來實現這一目標,但它給所有的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允許使用沒有group by的聚合函數,這是完全誤導的。在這種情況下,你得到了一個隨機的file_id和所有記錄的數量 - 當然你不打算這麼做。

要獲得組數(或任何其他聚合函數),使用GROUP BY子句:

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

你會怎樣廣告'where',與'COUNT(*)'互動條款?例如。選擇計數大於5的計數? – DogEatDog 2017-10-17 15:39:41

+1

@DogEatDog通過以下方式在組之後添加子句:'有count(*)> 5'。 – 2017-10-17 16:05:18

3

GROUP BY ...

SELECT file_id, COUNT(*) 
    FROM data 
GROUP BY file_id 
2
select file_id, count(*) 
    from data 
group by file_id 
相關問題