Как добавить подсчет с помощью SUM () в mysql?

select distinct b.actor_id
from actor b, rolee br, movie bm, movie_has_genre bmg, genre bg
where bmg.genre_id not in(select mg.genre_id
                         from actor a, rolee r, movie m, movie_has_genre mg, genre g
                           where a.actor_id = r.actor_id and r.movie_id = m.movie_id and m.movie_id = mg.movie_id and g.genre_id = mg.genre_id and a.actor_id = 3226)
and b.actor_id = br.actor_id and br.movie_id = bm.movie_id and bm.movie_id = bmg.movie_id and bmg.genre_id = bg.genre_id
and sum(count(distinct mg.genre_id) + count(distinct bmg.genre_id))>=7
group by b.actor_id

У меня есть вышеуказанный запрос mysql, и мне нужна общая сумма подсчета bmg.genre_id и mg.genre_id. Когда я пытаюсь выполнить этот запрос, я получаю НЕПРАВИЛЬНОЕ ИСПОЛЬЗОВАНИЕ ГРУППОВОЙ ФУНКЦИИ ОШИБКА 1111.

Никогда используйте запятые в предложении FROM. Всегда использует правильный, явный, стандартный синтаксис JOIN.
Gordon Linoff 31.05.2018 13:08

Какова причина ?

Salih K. Chousein 31.05.2018 13:12

@ SalihK.Chousein Тройной - 1. Понятность для человека 2. Определенность иерархии соединений 3. Позволяет легко переходить к другим типам соединений (например, внешним соединениям)

Strawberry 31.05.2018 13:25
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
3
63
2

Ответы 2

Поскольку sum является агрегатной функцией, вы можете использовать ее только с предложением Have для групповой фильтрации.

select b.actor_id
from actor b, rolee br, movie bm, movie_has_genre bmg, genre bg
where bmg.genre_id not in(select mg.genre_id
                          from actor a, rolee r, movie m, movie_has_genre mg, genre g
                          where a.actor_id = r.actor_id and r.movie_id = m.movie_id and m.movie_id = mg.movie_id and g.genre_id = mg.genre_id and a.actor_id = 3226)
and b.actor_id = br.actor_id and br.movie_id = bm.movie_id and bm.movie_id = bmg.movie_id and bmg.genre_id = bg.genre_id
group by b.actor_id
having sum(count(distinct mg.genre_id) + count(distinct bmg.genre_id))>=7;

Спасибо за ответ, я получаю сообщение об ошибке: Код ошибки: 1054. Неизвестный столбец "mg.genre_id" в "имеющий.

Salih K. Chousein 31.05.2018 13:44

Вы не можете использовать групповые функции в предложении WHERE. Используйте предложение HAVING для групповых функций.

Я не думаю, что проблема в Group by

janith1024 31.05.2018 13:51

Другие вопросы по теме