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

PostgreSQL में एक टेबल से दूसरी टेबल में डालने के लिए फंक्शन?

आप इस समस्या को शुद्ध SQL में हल कर सकते हैं, इसके लिए आपको किसी फ़ंक्शन की आवश्यकता नहीं है।

सबसे अच्छी बात यह है कि आँकड़ों के संग्रह को दो अलग-अलग प्रश्नों में विभाजित किया जाता है, एक जब टीम घर पर खेलती है, एक जब वे खेलते हैं। प्रत्येक खेल के लिए अंक और बनाए गए लक्ष्यों की गणना करें। फिर UNION उन दो प्रश्नों और समग्र आँकड़ों की गणना के लिए एक उप-क्वेरी के रूप में उपयोग करें:

SELECT
  eq.nom_equipo AS equipo,
  COUNT(p.*) AS partidos_jug,
  SUM(CASE WHEN p.puntos = 3 THEN 1 ELSE 0 END) partidos_gana,
  SUM(CASE WHEN p.puntos = 1 THEN 1 ELSE 0 END) partidos_emp,
  SUM(CASE WHEN p.puntos = 0 THEN 1 ELSE 0 END) partidos_perd,
  SUM(p.puntos) AS puntos,
  SUM(p.goles) AS goles_favor
FROM equipos eq
JOIN (
  -- Playing at home
  SELECT
    num_eqpo_loc AS eqpo, 
    CASE WHEN (goles_loc > goles_vis) THEN 3
         WHEN (goles_loc = goles_vis) THEN 1
         ELSE 0
    END AS puntos,
    goles_loc AS goles
  FROM partidos
  UNION
  -- Playing away
  SELECT
    num_eqpo_vis AS eqpo, 
    CASE WHEN (goles_vis > goles_loc) THEN 3
         WHEN (goles_vis = goles_loc) THEN 1
         ELSE 0
    END AS puntos,
    goles_vis AS goles
  FROM partidos) AS p ON p.eqpo = eq.num_eqpo
GROUP BY equipo
ORDER BY puntos DESC, partidos_jug ASC, goles_favor DESC;

CASE . के कारण यह विशेष रूप से तेज़ नहीं है बयान, लेकिन यह एक प्रक्रिया और एक लूप का उपयोग करने की तुलना में तेज़ होगा।

इस क्वेरी के परिणाम को एक तालिका में रखने के बजाय, मैं सुझाव दूंगा कि आप CREATE VIEW general AS ... उपरोक्त क्वेरी के साथ। उस स्थिति में आप हमेशा नवीनतम परिणाम प्राप्त करते हैं जब आप SELECT * FROM general और आपको TRUNCATE . करने की ज़रूरत नहीं है क्वेरी चलाने से पहले सामान्य तालिका (तालिका में डेटा के साथ नए परिणाम जोड़ने से पीके बाधा का उल्लंघन होगा)। यदि आपको वास्तव में तालिका की आवश्यकता है तो SELECT ... INTO general FROM ... . का उपयोग करें उपरोक्त क्वेरी में।




  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. PostgreSQL उपयोगकर्ता अनुमतियाँ

  3. ऑब्जेक्ट में संपत्ति जोड़ें जो कि Sequelize FindOne द्वारा लौटाया गया है

  4. जांचें कि क्या JSON में PL/pgSQL के साथ कुंजी मौजूद है?

  5. पांडा में इष्टतम खंड आकार पैरामीटर।DataFrame.to_sql