我有这个查询:
select * from mbk_file
where user_id = $1
order by (
select count(file_id) from mbk_file_label
where file_id = mbk_file.id
) DESC
我注意到将 DESC 更改为 ASC 并没有改变顺序,尽管我希望它应该如此。所以这告诉我子查询并没有真正做任何有用的事情。
我有这些表:
-----mbk_file------
id bigint
-----mbk_file_label-----
id bigint
file_id (from above table)
第一张和第二张桌子之间有一对多。我认为我不需要 group by 子句,我只需要计算 file_id 来自第一个表的所有行吗?
我想我需要做这样的事情:
select *, (
select count(file_id) from mbk_file_label
where file_id = mbk_file.id
) as xxx
from mbk_file
where user_id = $1
order by xxx DESC
但我仍然不明白 file_id 将如何因行而异..
让我用数据解释一下:
---mbk_file---- // has 3 records total
1
2
3
---mbk_file_label
1 1
1 2
1 3
1 4 // file 1 has 4 matching records
2 1
2 3 // file 2 has 2 matching records
3 2
3 3
3 4 // file 3 has 3 matching records
所以我想做的是根据 mbk-file-label 中有多少匹配记录对 mbk-files 进行排名。
因此 mbk 文件的选择结果的排名/顺序将是:
1
3
2
从 1 开始,有 4 条匹配记录,文件 2 有 2 条匹配记录,文件 3 有 3 条匹配记录。我希望这是有道理的,因为它非常简单,但我不知道如何创建查询 fml :(