仅使用SQL计算一对多关系中的子记录数

Mer*_*glu 3 sql count distinct one-to-many

我有一个包含两个表的数据库:datafile.

file_id是一个外键datafile.因此,从关系datafile被N到一个.

有没有办法只使用SQL来查找data引用每条记录的记录数file

例如,我可以找到有多少数据记录引用id为13的文件:

select count(*) from data where file_id = 13;
Run Code Online (Sandbox Code Playgroud)

我想知道每个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 |
+---------+----------+
Run Code Online (Sandbox Code Playgroud)

Nik*_*vić 8

Distinct返回每行的不同值,而不是每个组.MySql允许使用没有group by的聚合函数,这完全是误导性的.在这种情况下,你有一个随机的file_id和所有记录的计数 - 当然你不打算这样做.

要获取组计数(或任何其他聚合函数),请使用group by子句:

select file_id, count(*)
  from data
 group by file_id
Run Code Online (Sandbox Code Playgroud)


Jon*_*ler 5

通过...分组...

SELECT file_id, COUNT(*)
  FROM data
 GROUP BY file_id
Run Code Online (Sandbox Code Playgroud)