sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL finde fælles kombination af par på samme kolonne

Jeg gætter på, at du har brug for et join for at finde alle platformspar:

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

REDIGER 2

Ved at bruge forespørgslen ovenfor kan du finde det fælles serienummer. Det eneste der er tilbage er at finde 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. Flere stigende rækkefølge virker ikke i Mysql

  2. MySQL MOD() er brudt:Er dette det bedste alternativ?

  3. PHP og Mysql forespørgsel, brug PHP til at konvertere række til kolonner

  4. Ved hjælp af PL/SQL, hvordan får jeg en fils indhold ind i en klat?