首頁>Database>source

我有這个查詢:

      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-file进行排名。

因此mbk檔案選擇結果的等級/順序為:

1
3
2

由於1具有4个匹配記錄,檔案2具有2个匹配記錄,檔案3具有3个匹配記錄.我希望這是有道理的,因為它非常簡單,但是我不知道如何建立查詢fml:(

最新回復
  • 5月前
    1 #

    您的 ORDER BY 是這个吗?

    order by (
               select count(file_id)....
           ) DESC
    

    count 將返迴一个(常數)整數,例如300。這意味着您實際上是在說 ORDER BY 300 DESC (其中300是指定的user_id的file_id值的數量).這不是使用列进行排序,而是使用常量。

    按常量排序無济於事.您大概希望結果是根据列中的值(或从列匯出的計算)来排序的,但這不是查詢所要做的

  • mysql:从IBD檔案重新建立資料庫(無FRM)
  • postgresql:錯誤訊息中精度1的含義是0?