4

PostgreSQLクエリの結果を、真のOR句の数で並べ替え/ランク付けする必要があります。たとえば、次のようなクエリが与えられます

SELECT * FROM mytable WHERE cond1 OR cond2 OR cond3 ORDER BY rank DESC

満たされた条件の数に基づいて結果をランク付けする必要があります。また、ビュー/ストアドプロシージャを使用してこの問題を解決するアプローチも大歓迎です。

4

3 に答える 3

5

条件を繰り返して追加します。

SELECT * FROM mytable 
WHERE fld = 'A' OR fldB = CURRENT_DATE OR fldC = 7
ORDER BY
   (fld = 'A')::int + (fldB = CURRENT_DATE)::int + (fldC = 7)::int  
DESC
于 2012-04-18T14:01:59.810 に答える
2

多分このような何か:

select *
from (
    SELECT * , case when cond1 then 1 else 0 end
             + case when cond2 then 1 else 0 end
             + case when cond3 then 1 else 0 end as cond_count
    FROM mytable 
    WHERE cond1 
       OR cond2 
       OR cond3 
) t
order by cond_count desc

このソリューションの醜い点は、ステートメントにすべての条件が2回あることですが、現在、別のソリューションを考えることはできません。

于 2012-04-18T14:27:59.983 に答える
-2
The above query will check those conditions from the left side one by one i.e 

if the cond1 is true then 
      return the results order by rank.
if cond1 is false and cond2 is true then
      return the results order by rank.
if cond1 and cond2 both are false but cond3 is true
      returns the results order by rank.
if all conditions are false then no result is returned.     

So in brief it doesn't check all the conditions simultaneously for OR conditions.


Thanks.
于 2012-04-18T14:00:46.083 に答える