Home > Mobile >  How to count common usage of items in SQL?
How to count common usage of items in SQL?

Time:02-20

I want to count how much common projects companies have with each other, like:

Company Participation
Apple Project 1
Microsoft Project 1
Tesla Project 2
Apple Project 2
Microsoft Project 2

Is there a easy to go method in SQL to do so? With the output like that?

Apple Microsoft Tesla
Microsoft 2 1
Tesla 1 1
Apple 2 1

CodePudding user response:

There's a simple way, but - output isn't exactly as you'd want it to. It shows pairs and number of common projects (the cnt column):

SQL> select a.company, b.company, count(distinct b.participation) cnt
  2  from project a join project b on a.company < b.company
  3  group by a.company, b.company;

COMPANY   COMPANY          CNT
--------- --------- ----------
Apple     Tesla              1
Apple     Microsoft          2
Microsoft Tesla              1

SQL>

CodePudding user response:

It's possible to do a self-join in the source query of a pivot.

SELECT *
FROM (
  SELECT t1.Company
  , t2.Company AS Company2
  , COUNT(t1.Participation) AS Participations
  FROM CompanyProjectParticipations t1
  JOIN CompanyProjectParticipations t2
    ON t2.Participation = t1.Participation
   AND t2.Company != t1.Company
  GROUP BY t1.Company, t2.Company
) Src
PIVOT (
  SUM(Participations)
  FOR Company2 IN ([Apple], [Microsoft], [Tesla])
) Pvt
ORDER BY Company;
Company Apple Microsoft Tesla
Apple null 2 1
Microsoft 2 null 1
Tesla 1 1 null

Test on db<>fiddle here

  • Related