sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL hittar vanliga kombinationer av par i samma kolumn

Jag antar att du behöver en gå med för att hitta alla plattformspar:

select 
  sp1.platform as platform1, sp2.platform as platform2, count(*) as numcommon 
from 
  seriesonplatform AS sp1
  JOIN seriesonplatform AS sp2 ON (sp1.seriesid = sp2.seriesid) AND (sp1.platform <>  sp2.platform)
where 
  sp1.platform in ('BET','BET+')
  AND sp2.platform in ('BET','BET+')
group by
  sp1.platform,
  sp2.platform

EDIT 2

Med hjälp av frågan ovan kan du hitta det gemensamma serienumret. Allt som återstår är att hitta procent:

SELECT 
  platform1.platform, common.platform2, numcommon * 1.0 / platform1.seriescount AS show_on_platform2
FROM (
  SELECT 
    platform, count(*) AS seriescount
  FROM 
    seriesonplatform
  GROUP BY
    platform 
) platform1
LEFT JOIN (
  SELECT 
    sp1.platform as platform1, sp2.platform as platform2, count(*) as numcommon 
  FROM 
    seriesonplatform AS sp1
    JOIN seriesonplatform AS sp2 ON (sp1.seriesid = sp2.seriesid) AND (sp1.platform <>  sp2.platform)
  GROUP BY
    sp1.platform,
    sp2.platform
) AS common ON platform1.platform = common.platform1
WHERE 
  numcommon * 1.0 / platform1.seriescount > 0.5
ORDER BY
  platform1.platform, platform2



  1. SQLAlchemy create_all() skapar inte tabeller

  2. Kombinera två tabeller till en ny så att valda rader från den andra ignoreras

  3. Mysql kan inte utföra mer än en fråga åt gången

  4. Det gick inte att ladda DLL 'SqlServerSpatial.dll'