PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

इनपुट के आधार पर अनुक्रमित और गैर-अनुक्रमित ऑपरेशन के बीच कैसे स्विच करें?

मुझे नहीं लगता कि इसे शुद्ध SQL में किया जा सकता है।

इसे PL/pgSQL में अनुवाद करना बहुत आसान है।

CREATE OR REPLACE FUNCTION public.usp_get_data(i_distance_choice integer, i_longitude double precision, i_latitude double precision)
 RETURNS TABLE(convo_id bigint)
 LANGUAGE plpgsql
 STABLE
AS $function$
    BEGIN
      IF i_distance_choice < 75 then
        return query SELECT po.convo_id
          FROM post po
          WHERE ST_DWithin(po.geog, ST_SetSRID(ST_MakePoint(i_longitude, i_latitude), 4326), i_distance_choice * 1609.34)
          ORDER BY po.reply_count DESC, convo_id DESC
          LIMIT 10;
      ELSE
        return query SELECT po.convo_id
          FROM post po
          WHERE po.geog<->ST_SetSRID(ST_MakePoint(i_longitude, i_latitude), 4326) < i_distance_choice * 1609.34
          ORDER BY po.reply_count DESC, convo_id DESC
          LIMIT 10;
      END IF;
    END
$function$

मैंने सत्यापित किया है कि यह भूगोल सूचकांक <75 और btree (reply_count, convo_id) का उपयोग करता है सूचकांक 75 और उससे अधिक पर।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेस्क्ल के साथ डाटामैपर में केस असंवेदनशील (जैसे)

  2. मैं स्प्रिंगबूट और हाइबरनेट का उपयोग करके जेडीबीसी पैरामीटर कैसे पास करूं?

  3. ग्रहण/हाइबरनेट उपकरण त्रुटि:संग्रह वर्गपथ प्रविष्टि मौजूद नहीं है

  4. बावर्ची और पोस्टग्रेज; मैं पासवर्ड कैसे निर्दिष्ट करूं?

  5. आवश्यक PostgreSQL निगरानी - भाग 3