Есть таблица, в ней книги и авторы. Сколько авторов добавит пользователь, неизвестно. Нужно вытащить названия тех книг, у которых более трёх авторов. Есть , конечно, простое решение: добавить доп. поле с количеством авторов каждой книги. Тогда: Код (Text): SELECT book_name FROM books WHERE count >= 3 Но, предположим, добавление поля count недопустимо. Можно ли как-то составить запрос, который вернёт количество непустых колонок независимо от их количества? На худой конец можно так: Код (Text): SELECT book_name FROM books WHERE author_1 !='' AND author_2 !='' AND author_3 !='' Но это не подходит, если кол-во авторов изменится... Отмечу, что отношение я составляю сам, так что полям авторов необязательно быть пуст. строкой, можно и NULL. Также можно поменять структуру таблицы. Это на случай, если предлагаемые решения будут радикальными
кол-во можно агрегировать налету функцией count() и потом отбирать через having всё значения больше 3
Но count() же считает кол-во значений (строк) в одном поле, а мне бы посчитать кол-во полей, причём имена их доподлинно неизвестны, т.к. поля могут добавляться) В общем, решил делать нормализацию (разбил на 2 отношения) и тогда уже применять GROUP BY. Спасибо.