要求按條件排序 - 如果欄位是獨占的,則按"fees"."exclusive_price"else by排序"fees"."additional_price"。
SQL 完全如下所示:
SELECT DISTINCT "numbers".*
FROM "numbers"
INNER JOIN "users_numbers" ON "users_numbers"."number_id" = "numbers"."id"
INNER JOIN "users" ON "users"."id" = "users_numbers"."user_id"
INNER JOIN "fees" ON "fees"."user_id" = "users"."id"
WHERE "numbers"."state" != 'removed'
ORDER BY CASE "numbers"."is_exclusive" WHEN TRUE THEN "fees"."exclusive_price" ELSE "fees"."additional_price" END desc"
但我得到一個錯誤(在rails中):
ActiveRecord::StatementInvalid: PG::InFailedSqlTransaction: 錯誤: 當前事務被中止,命令被忽略直到事務塊結束
由于distinct的錯誤。沒有明顯的- 成功。
如何更正 SQL?
將相關表中的列添加到 SELECT - 沒有幫助:
SELECT DISTINCT "fees"."exclusive_price", "fees"."additional_price", "sender_numbers".*
FROM ...
uj5u.com熱心網友回復:
DISTINCT基于完整SELECT串列的普通重復資料洗掉。然后(最后)ORDER BY步驟只接受屬于該SELECT串列的運算式。
要按該CASE運算式排序,您必須將其包含在SELECT串列中。喜歡:
SELECT DISTINCT n.*, CASE WHEN n.is_exclusive THEN f.exclusive_price ELSE f.additional_price END AS order_col
FROM numbers n
JOIN users_numbers un ON un.number_id = n.id
JOIN users u ON u.id = un.user_id
JOIN fees f ON f.user_id = u.id
WHERE n.state <> 'removed'
ORDER BY order_col DESC;
您必須將其包裝在外部查詢中才能order_col從SELECT串列中洗掉。但我不確定,我們有完整的畫面,但是。并且可能有更簡單的方法......
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/533106.html
標籤:sql轨道上的红宝石PostgreSQL每组最大 n皮克
上一篇:如何在PL/SQL中呼叫函式?
