SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 07.12.2010 07:55:36

Arzamas
Участник
Зарегистрирован: 07.12.2010
Сообщений: 16

Ошибка с создание представления VIEW

Создал представление:

Код:

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

Неактивен

 

#2 07.12.2010 09:32:07

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка с создание представления VIEW

Дело не в представлении, а в том запросе, на основании которого оно построено.
Выполните, чтобы убедиться в неправильности исходного запроса:

SELECT F_name,L_name,Male,Age,Opit,COUNT(*)
FROM LI_prodavec RIGHT JOIN Prodagi
ON LI_prodavec.Id=Prodagi.Id_prodavec;



Относительно того, почему одна строка, сравните результат следующих запросов:
SELECT LI_prodavec.* FROM LI_prodavec ;
SELECT LI_prodavec.*, count(*) FROM LI_prodavec ;

Неактивен

 

#3 07.12.2010 18:45:27

Arzamas
Участник
Зарегистрирован: 07.12.2010
Сообщений: 16

Re: Ошибка с создание представления VIEW

vasya написал:

Выполните, чтобы убедиться в неправильности исходного запроса

Выполнил, результат такой же как и при выполнении представления. Тоже лишь 1 фамилия вместо 3ех и COUNT(*) = 7.

vasya написал:

Относительно того, почему одна строка, сравните результат следующих запросов:

При выполнении 1ого запроса, как и следовало ожидать, отобразилась таблица LI_prodavec, состоящая из 3ёх фамилий, а вот результат 2ого запроса - лишь 1ая фамилия, и поле COUNT(*)=3 (вообще то должно равняться 2,но так как не корректно работает запрос, где 2 лишние сточки появляются - этот вопрос в другой теме, возможно из-за этого такой ответ)

Неактивен

 

#4 07.12.2010 21:16:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка с создание представления VIEW

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.
На месте сервера, я бы вообще не стал выполнять такой запросwink, так как неясно,что вы хотите посчитать. Стандарт SQL запрещает такие запросы, это фишка MySQL, что они выполняются.

Arzamas написал:

При выполнении 1ого запроса, как и следовало ожидать, отобразилась таблица LI_prodavec, состоящая из 3ёх фамилий, а вот результат 2ого запроса - лишь 1ая фамилия, и поле COUNT(*)=3 (вообще то должно равняться 2,но так как не корректно работает запрос, где 2 лишние сточки появляются - этот вопрос в другой теме, возможно из-за этого такой ответ)

Почему поле count(*) должно равняться 2ум, если вы пишите, что в таблице 3 строки?

Неактивен

 

#5 07.12.2010 21:24:10

Arzamas
Участник
Зарегистрирован: 07.12.2010
Сообщений: 16

Re: Ошибка с создание представления VIEW

Ну вообще предполагалось что я считаю количество произведенных продаж продавцами smile
Поэтому
Фамилия1 .... COUNT(*)=2
Фамилия2 .... COUNT(*)=2
Фамилия3 .... COUNT(*)=3

Неактивен

 

#6 07.12.2010 21:27:23

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка с создание представления VIEW

SELECT LI_prodavec.*, count(L_name) FROM LI_prodavec GROUP BY L_name;

Неактивен

 

#7 07.12.2010 21:50:14

Arzamas
Участник
Зарегистрирован: 07.12.2010
Сообщений: 16

Re: Ошибка с создание представления VIEW

Судя по тому что в предыдущему посту -  не совсем понятно что именно я хочу сделать! Сейчас заново объясню!
Значит есть 2 таблицы, необходимые в данном случае: LI_prodavec и Prodagi. В 1ой таблице - личная инфа продавцов, во второй: ID, Id продавца, Id товара. Т.е. таблица в которой указано какой продавец чего продал.
Так вот нужно создать представление, которое выводит всю инфу о продавце и количество совершённых продаж им продаж.

Неактивен

 

#8 07.12.2010 21:56:30

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ошибка с создание представления VIEW

Предыдущий пост это просто образец применения GROP BY.
В вашем случае его (group by) нужно использовать в исходном запросе, который с двумя таблицами.

Неактивен

 

#9 07.12.2010 22:06:41

Arzamas
Участник
Зарегистрирован: 07.12.2010
Сообщений: 16

Re: Ошибка с создание представления VIEW

Хм, все гениально просто... Спасибо, это помогло!
Честно говоря не совсем понятно, почему отсутствие группировки так влияет на конечный ответ... Ну вот если логически посудить - группировка - это сбор в одно место записей с каким то одинаковым параметром (в данном случае - фамилия), но тогда почему когда группировки небыло, не отображались остальные фамилии? было бы понятно если они все все отобразились и везде каунт был равен 1, сгруппировали и получили 3,2,2.. а без группировки все в одну фамилию пихает, не поддается это моей логике!smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson