【问题标题】:SQL "WHERE" with Division带除法的 SQL“WHERE”
【发布时间】:2015-01-04 14:16:18
【问题描述】:

所以,我想获得产品评级并应用它来获得 TOP PRODUCTS。

    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 ...。

我该怎么做?

编辑: 以免混淆! 评分总和,将是一个整数,其中来自评论者的所有评分将相互添加,评分计数是每次用户评论该特定产品(此 Prod_ID)时递增的东西,在此之后,评分就是你得到的从除以这个!

有没有更好的方法来获得多个评论者对特定产品的平均评分?

【问题讨论】:

  • “RatingSum/RatingCount”是什么意思?是否要检查两个列的值?
  • 我想要评分,所以我收集了整个评分总和,比如说 (3,3,4,5),然后除以这里的计数 (4)。要获得平均值,显然:D
  • @user3054349 。 . .我不明白。 RatingSumRatingCount 一样是一列,所以你的问题是关于简单除法的。如果您有其他想法,您应该编辑您的问题并包含示例数据和所需的结果。
  • 评分总和,将是一个整数,其中来自评论者的所有评分将相互叠加,评分计数是每次用户评论该特定产品(此 Prod_ID)时增加的东西,之后这个,评分就是你从这个除以那个得到的!
  • 这是一个简单的WHERE 条件。您是否尝试过您在问题中发布的内容?

标签: sql-server database where-clause


【解决方案1】:

首先,你可以这样做:

WHERE (RatingSum/RatingCount) >= 4 

在您的查询中。为避免被零除,我建议将其更改为:

WHERE RatingSum >= 4 * RatingCount >= 4 

或:

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

此外,您不应该在from 子句中使用逗号。始终使用显式 join 语法。

【讨论】:

  • 如果我使用“Having”会更好吗?还有什么更好的方法来获得评分,我正在使用的这种方法或 AVG(rating),其中 (rating) 将是名为 (Product) 的实体中的另一个属性?
  • HAVING 应仅用于 聚合 值 - 例如如果您有 SUM(...)AVG(...) 并且您需要对该聚合应用条件。
猜你喜欢
  • 1970-01-01
  • 2017-12-22
  • 2022-01-20
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多