5

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

file_id是从datato的外键file。所以,从data到的关系file是n比一。

有没有办法只使用 SQL 来找出data引用的每条记录有多少条记录file

例如,我可以找到有多少条数据记录引用了 id 为 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 |
+---------+----------+
4

3 回答 3

9

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

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

select file_id, count(*)
  from data
 group by file_id
于 2012-04-08T16:08:18.163 回答
4

通过...分组...

SELECT file_id, COUNT(*)
  FROM data
 GROUP BY file_id
于 2012-04-08T16:05:30.993 回答
2
select file_id, count(*)
  from data
 group by file_id
于 2012-04-08T16:05:38.777 回答