Задавайте вопросы, мы ответим
Вы не зашли.
Создал представление:
CREATE VIEW VIEWPRODAVEC AS SELECT F_name,L_name,Male,Age,Opit,COUNT(*) FROM LI_prodavec RIGHT JOIN Prodagi ON LI_prodavec.Id=Prodagi.Id_prodavec;
Представление ошибок не выдает, но не совсем корректно отображается, после вывода на экран ответ содержит всего 1ого продавца вместо 3их и последняя колонка COUNT(*) является суммой всех 3их людей и в моем случае ответ должен быть таков:
Фамилия1 ........... 2
Фамилия2 ........... 2
Фамилия3 ........... 3
а отображается лишь:
Фамилия1 ........... 7
Неактивен
Дело не в представлении, а в том запросе, на основании которого оно построено.
Выполните, чтобы убедиться в неправильности исходного запроса:
Неактивен
vasya написал:
Выполните, чтобы убедиться в неправильности исходного запроса
Выполнил, результат такой же как и при выполнении представления. Тоже лишь 1 фамилия вместо 3ех и COUNT(*) = 7.
vasya написал:
Относительно того, почему одна строка, сравните результат следующих запросов:
При выполнении 1ого запроса, как и следовало ожидать, отобразилась таблица LI_prodavec, состоящая из 3ёх фамилий, а вот результат 2ого запроса - лишь 1ая фамилия, и поле COUNT(*)=3 (вообще то должно равняться 2,но так как не корректно работает запрос, где 2 лишние сточки появляются - этот вопрос в другой теме, возможно из-за этого такой ответ)
Неактивен
Arzamas написал:
vasya написал:
Выполните, чтобы убедиться в неправильности исходного запроса
Выполнил, результат такой же как и при выполнении представления. Тоже лишь 1 фамилия вместо 3ех и COUNT(*) = 7.
Естественно, такой же. Ведь представление основано на данном запросе и ошибка не в представлении, а взапросе.
Arzamas написал:
vasya написал:
Относительно того, почему одна строка, сравните результат следующих запросов:
При выполнении 1ого запроса, как и следовало ожидать, отобразилась таблица LI_prodavec, состоящая из 3ёх фамилий, а вот результат 2ого запроса - лишь 1ая фамилия, и поле COUNT(*)=3
Вывод?
count(*) это аггрегирующая функция, используя её вы делаете неявную группировку.
Аналогично, одну строку вы получите если выполните запрос типа
SELECT LI_prodavec.*, max(id) FROM LI_prodavec;
Определитесь с тем, что вам нужно посчитать и пишите честно GROUP BY.
На месте сервера, я бы вообще не стал выполнять такой запрос, так как неясно,что вы хотите посчитать. Стандарт SQL запрещает такие запросы, это фишка MySQL, что они выполняются.
Arzamas написал:
При выполнении 1ого запроса, как и следовало ожидать, отобразилась таблица LI_prodavec, состоящая из 3ёх фамилий, а вот результат 2ого запроса - лишь 1ая фамилия, и поле COUNT(*)=3 (вообще то должно равняться 2,но так как не корректно работает запрос, где 2 лишние сточки появляются - этот вопрос в другой теме, возможно из-за этого такой ответ)
Почему поле count(*) должно равняться 2ум, если вы пишите, что в таблице 3 строки?
Неактивен
Ну вообще предполагалось что я считаю количество произведенных продаж продавцами
Поэтому
Фамилия1 .... COUNT(*)=2
Фамилия2 .... COUNT(*)=2
Фамилия3 .... COUNT(*)=3
Неактивен
Неактивен
Судя по тому что в предыдущему посту - не совсем понятно что именно я хочу сделать! Сейчас заново объясню!
Значит есть 2 таблицы, необходимые в данном случае: LI_prodavec и Prodagi. В 1ой таблице - личная инфа продавцов, во второй: ID, Id продавца, Id товара. Т.е. таблица в которой указано какой продавец чего продал.
Так вот нужно создать представление, которое выводит всю инфу о продавце и количество совершённых продаж им продаж.
Неактивен
Предыдущий пост это просто образец применения GROP BY.
В вашем случае его (group by) нужно использовать в исходном запросе, который с двумя таблицами.
Неактивен
Хм, все гениально просто... Спасибо, это помогло!
Честно говоря не совсем понятно, почему отсутствие группировки так влияет на конечный ответ... Ну вот если логически посудить - группировка - это сбор в одно место записей с каким то одинаковым параметром (в данном случае - фамилия), но тогда почему когда группировки небыло, не отображались остальные фамилии? было бы понятно если они все все отобразились и везде каунт был равен 1, сгруппировали и получили 3,2,2.. а без группировки все в одну фамилию пихает, не поддается это моей логике!
Неактивен