Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Здравствуйте. Подскажите пожалуйста почему SQL запрос суммирует значение если поля у них пустые?

Stranger Профи (914), на голосовании 3 года назад
Есть, такой запрос в нем мы говорим возьми только те поля у который столбец rating лежат числа на и самые большие.

SELECT product.id,product.name,product.alias,product.price,product.old_price,product.image,MAX(comment_product.rating) AS rating FROM product INNER JOIN comment_product ON comment_product.product_id = product.id WHERE product.`visibility` = '1' GROUP BY product.id DESC

Но в другой таблице в столбце rating Лежат Ноли (0) Но он почему то возвращает не 0 а число 3 (Он просто суммирует запрос в одно единое) По фотографиям думаю будет по понятней)

https://yadi.sk/i/8Vc2qJYuKFeSZQ

https://yadi.sk/i/1twansVv05f8yA
Голосование за лучший ответ
Оракул Оракул (62095) 3 года назад
Там не только нули, но и числа есть. Признака visibility в таблице product на скринах не видно. Надо смотреть записи product с visibility=1, среди них есть ссылки на comment_product с рейтингом 3, не только 0.
Подозреваю, что это product с id=3. В таблице comment_product как раз есть коммент с максимальным рейтингом = 3 (последняя строка)
StrangerПрофи (914) 3 года назад
Запрос SQL все же думаю вытаскивает записи как-то по своему)
В таблице product столбцы с visibility=1 Все выставлены 1 На показ.
Оракул Оракул (62095) Stranger, что значит по-своему? Вы должны понимать, как он вытаскивает записи, вы же запрос пишете.
StrangerПрофи (914) 3 года назад
Простите но пока не доходит почему 3 а не ноль) Идет обращение к столбцу rating а не к id
Оракул Оракул (62095) Stranger, давайте уточним, я не знаю о каком селекте вы говорите, я говорю только о том селекте, что вы предоставили в вопросе. На втором скриншоте 5 последних строк относятся к продукту id=3. Три нуля, 1 и 3 рейтинги. Максимальный 3.
StrangerПрофи (914) 3 года назад
0 + 0 + 0 = 3 Как он суммирует?

SELECT
product.id,
product.name,
product.alias,
product.price,
product.old_price,
product.image,
comment_product.rating,
MAX(comment_product.rating) AS `rating`
FROM product INNER JOIN comment_product ON comment_product.product_id = product.id
WHERE product.`visibility` = '1' GROUP BY product.id

https://yadi.sk/i/UVKo47na90WyXg
Оракул Оракул (62095) Stranger, да ничего у вас там не суммируется, еще раз говорю. Нет в селекте никаких сумматоров. Максимальный рейтинг ТРИ у записи с идентификатором 15! Вас только это смущает? А то, что в других строках 30 и 75, 80 и 100 не смущает?
StrangerПрофи (914) 3 года назад
SELECT
product.id,
product.name,
product.alias,
product.price,
product.old_price,
product.image,
MAX(comment_product.rating) AS `reting`
FROM product INNER JOIN comment_product ON comment_product.product_id = product.id
WHERE `visibility` = '1' GROUP BY product.id

Добавил еще коментарие к product_id с id 3

https://yadi.sk/i/SWz3mohBo3ey3A

https://yadi.sk/i/fz2Hvh8t9JR3cw

Не могу понять почему теперь то все работает всем подлог)
Оракул Оракул (62095) Stranger, в смысле теперь работает? вы просто из селеста убрали одно поле comment_product.rating и оставили только максимальный рейтинг. Похоже вы вообще бездумно пишете запрос.
StrangerПрофи (914) 3 года назад
Как написать SQL запрос чтобы rating с 0 не выбирался?
Оракул Оракул (62095) Stranger, where product.rating <> 0 или comment_product.rating <> 0 в зависимости из какой таблицы вы проверяете рейтинг
StrangerПрофи (914) 3 года назад
Подскажите по каким критериям отбираются Топ-20 продуктов?
Оракул Оракул (62095) Stranger, в зависимости от синтаксиса СУБД, вы так и не сказали что за субд у вас, как-то так для Oracle СУБД select * from product where rownum <= 20 order by rating desc; для MySQL select * from product order by rating desc limit 20; для Microsoft Server select top 20 from product order by rating desc;
StrangerПрофи (914) 3 года назад
MySQL
StrangerПрофи (914) 3 года назад
rating У меня в другой таблице находится в comment_product

select * from product, comment_product
order by comment_product.rating desc
limit 20;
Оракул Оракул (62095) Stranger, хорошо, в другой. Просто вы не предоставили доменную модель, а из скриншотов казалось, что это таблицы, а не результат селектов. Тогда то же самое, только с join select product.* from product p join comment_product cp on p.id = cp.product_id order by cp.rating desc limit 20;
StrangerПрофи (914) 3 года назад
Начало так)

select
product.id,
product.name,
product.alias,
product.price,
product.old_price,
product.image

?? Здесь что у нас получается?

from product p
join comment_product cp on p.id = cp.product_id
order by cp.rating desc
limit 20;
StrangerПрофи (914) 3 года назад
WHERE product.clothing_class = 'outerwear' AND product.`visibility` = '1'
StrangerПрофи (914) 3 года назад
select
product.id,
product.name,
product.alias,
product.price,
product.old_price,
product.image
from product
join comment_product on product.id = comment_product .product_id
WHERE product.clothing_class = 'outerwear' AND product.`visibility` = '1' order by comment_product.rating desc limit 20

Что-то вроде этого должно получится?
Оракул Оракул (62095) Stranger, ну наверное, я не понимаю, что вы хотите, как похоже и вы. У вас большие проблемы с пониманием самих азов. Лечится чтением любой базовой книги по SQL, хотя бы в объеме первых 2-3 глав. Мы уже с вами 3 часа разбираемся с элементарной, которая делается за 5 минут. Постановка задачи вообще мутная.
StrangerПрофи (914) 3 года назад
https://yadi.sk/i/NCSwv5YRUCUi5Q

Две одинаковые записи у которых не стоит значение product.clothing_class = 'outerwear'
Похожие вопросы