2015-01-04 3 views
0

Итак, я хочу получить рейтинг продукта и применить его для получения ТОП-ПРОДУКТОВ.SQL "WHERE" with Division

CREATE PROCEDURE [dbo].[TopProducts] 

AS 
BEGIN 
    SELECT Prod_Name, Qty, ProductImage, Price, Store_Name 
    FROM Product P, Store S 
    WHERE .... 

В моей таблице продукта, вы можете найти это:

(
Prod_ID int not null IDENTITY(1,1), 
Store_ID int not null, 
Price int not null , 
Prod_Name varchar(50) not null, 
Qty int not null, 
ProductDescription varchar(50), 
RatingSum int not null, 
RatingCount int not null, 
ProductImage varchar(50), 
Prod_Date date, 
PRIMARY KEY (Prod_ID), 
FOREIGN KEY (Store_ID) REFERENCES Store(Store_ID) 
); 

Итак, я хочу поставить в "WHERE" условие, это: (RatingSum/RatingCount)> = 4 ... например.

Как я могу это сделать?

EDIT: Во избежание путаницы! Сумма вознаграждения, была бы int, где все рейтинги от рецензентов будут добавлены друг к другу, а количество оценок - это то, что увеличивается каждый раз, когда пользователь просматривает этот конкретный продукт (этот Prod_ID), после этого рейтинг - это то, что вы отделитесь от этого!

Есть ли лучший способ получить средний рейтинг для определенного продукта у нескольких рецензентов?

+0

Что вы подразумеваете под "RatingSum/RatingCount"? Вы хотите проверить оба значения столбца? –

+0

Мне нужен рейтинг, поэтому я собираю всю оценочную сумму, скажем, (3,3,4,5) и делим ее на счет, который здесь (4). Чтобы получить среднее значение, очевидно: D – Cereal

+0

@ user3054349. , , Я не понимаю. 'RatingSum' - это столбец, как' RatingCount', поэтому ваш вопрос о простом делении. Если у вас есть что-то еще, вы должны отредактировать свой вопрос и включить образцы данных и желаемые результаты. –

ответ

4

Во-первых, вы можете просто сделать:

WHERE (RatingSum/RatingCount) >= 4 

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

WHERE RatingSum >= 4 * RatingCount >= 4 

или:

WHERE (RatingSum/NULLIF(RatingCount, 0) >= 4 

Кроме того, вы никогда не должны использовать запятую в предложении from. Всегда используйте явный синтаксис join.

+0

Это лучше, если я использовал «Имею»? И что лучше получить рейтинг, этот метод я использую или AVG (рейтинг), где (рейтинг) будет другим атрибутом в сущности, называемой (Product)? – Cereal

+2

'HAVING' следует использовать только для ** агрегированных ** значений - например. если у вас есть 'SUM (...)' или 'AVG (...)', и вам нужно применить условие к этому агрегату. –