подсчет появления комбинаций различий, поступающих из одного столбца?

#sql #count #google-bigquery

#sql #подсчет #google-bigquery

Вопрос:

Я хочу подсчитать, сколько человек участвовало в 2 комбинациях курсов

Допустим, у меня есть таблица1:

 Name    course
-----------------
Mary    Biology
Mary    Chemistry
Mary    Music
Kim     Music
Kim     Chemistry
Kim     Mathematics
Ida     Mathematics
Ida     Biology
Ida     Music
  

результаты должны быть такими

 Biology   Chemistry   1
Biology   music       2
Chemistry music       2
Mathematics music     2
  

Это то, что я получил, но не работает.

 select * From (
select t1.course, t2.course, count (*) AS total from 
(select
t1.name t1.course, t2.course
from data t1
JOIN data t2 ON t1.name=t2.name
where t1.course<>t2.course)
group by t1.name,t1.course,t2.course)
order by total desc; 
  

Комментарии:

1. можете ли вы пометить используемую СУБД? например, sql server, oracle, mysql, postgresql ..?

Ответ №1:

для BigQuery Legacy SQL или BigQuery Standard SQL (см. Включение стандартного SQL)

 SELECT 
  a.course as course_a, 
  b.course as course_b, 
  COUNT(*) as cnt
FROM rekry_data a 
JOIN rekry_data b 
ON a.Name=b.Name
WHERE a.course < b.course
GROUP BY a.course, b.course
  

Ответ №2:

 SELECT a.course, b.course, COUNT(*)
FROM mytable a JOIN mytable b ON a.Name=b.Name AND a.Course <> b.Course 
GROUP BY a.course, b.course