用SQL只计算一对多关系中的子记录数
问题描述:
我有一个包含两个表的数据库:data
和file
。用SQL只计算一对多关系中的子记录数
file_id
是从data
到file
的外键。所以,从data
到file
的关系是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 |
+---------+----------+
答
鲜明回报每行不同的值,一些组。 MySql允许使用没有group by的聚合函数,这是完全误导的。在这种情况下,你得到了一个随机的file_id和所有记录的数量 - 当然你不打算这么做。
要获得组数(或任何其他聚合函数),使用GROUP BY子句:
select file_id, count(*)
from data
group by file_id
答
GROUP BY ...
SELECT file_id, COUNT(*)
FROM data
GROUP BY file_id
答
select file_id, count(*)
from data
group by file_id
你会怎样广告'where',与'COUNT(*)'互动条款?例如。选择计数大于5的计数? – DogEatDog 2017-10-17 15:39:41
@DogEatDog通过以下方式在组之后添加子句:'有count(*)> 5'。 – 2017-10-17 16:05:18