#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, если хотите.