Как создать группы и подсчитать идентификаторы в SQL?

#mysql #sql #group-by #count #grouping

Вопрос:

Мне нужна помощь в написании некоторого SQL-кода. У меня есть таблица, организованная следующим образом.

Имя код
Джилл медикамент
Джилл alc
Мэтт медикамент
Салли медикамент
Макс alc
Милли Другое
Грабить медикамент

Мне нужно подсчитать, сколько людей (имя) назначено только для наркотиков, сколько назначено только для alc и сколько из них являются наркотиками и alc. Вывод должен выглядеть так:

код Рассчитывать
медикамент 3
alc 1
наркотики и алкоголь 1

Чтобы Милли не была включена в эти подсчеты, я просто хочу посмотреть на наркотики и алкоголь для кода.

Пожалуйста, помогите, я не могу этого понять!!

Ответ №1:

Сначала посмотрите на людей. К чему они пристрастились? Это приводит к ряду зависимостей на человека, как показано в запрошенном вами результате. Затем подсчитайте людей для всех найденных строк зависимости.

 select addictions, count(*)
from
(
  select name, group_concat(code order by code separator 'amp;') as addictions
  from mytable
  where code in ('drug', 'alc')
  group by name
) per_name
group by addictions
order by addictions;
 

Я ограничил это «наркотиками» и «алкоголем», как и просил. Вы можете удалить это ограничение, удалив предложение where, если хотите.