2012-04-08 74 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 
相关问题