簡體   English   中英

通過avg(x)在SQL中選擇值

[英]Selecting values in SQL by avg(x)

我改變了問題,因為我做了另一個錯誤的部分。我的目標是更新電影的年份信息,其中包含> = 4.但我無法通過他們的avgratings列出它們:(

/* Delete the tables if they already exist */
drop table if exists Movie;
drop table if exists Reviewer;
drop table if exists Rating;

/* Create the schema for our tables */
create table Movie(mID int, title text, year int, director text);
create table Reviewer(rID int, name text);
create table Rating(rID int, mID int, stars int, ratingDate date);

/* Populate the tables with our data */
insert into Movie values(101, 'Gone with the Wind', 1939, 'Victor Fleming');
insert into Movie values(102, 'Star Wars', 1977, 'George Lucas');
insert into Movie values(103, 'The Sound of Music', 1965, 'Robert Wise');
insert into Movie values(104, 'E.T.', 1982, 'Steven Spielberg');
insert into Movie values(105, 'Titanic', 1997, 'James Cameron');
insert into Movie values(106, 'Snow White', 1937, null);
insert into Movie values(107, 'Avatar', 2009, 'James Cameron');
insert into Movie values(108, 'Raiders of the Lost Ark', 1981, 'Steven Spielberg');

insert into Reviewer values(201, 'Sarah Martinez');
insert into Reviewer values(202, 'Daniel Lewis');
insert into Reviewer values(203, 'Brittany Harris');
insert into Reviewer values(204, 'Mike Anderson');
insert into Reviewer values(205, 'Chris Jackson');
insert into Reviewer values(206, 'Elizabeth Thomas');
insert into Reviewer values(207, 'James Cameron');
insert into Reviewer values(208, 'Ashley White');

insert into Rating values(201, 101, 2, '2011-01-22');
insert into Rating values(201, 101, 4, '2011-01-27');
insert into Rating values(202, 106, 4, null);
insert into Rating values(203, 103, 2, '2011-01-20');
insert into Rating values(203, 108, 4, '2011-01-12');
insert into Rating values(203, 108, 2, '2011-01-30');
insert into Rating values(204, 101, 3, '2011-01-09');
insert into Rating values(205, 103, 3, '2011-01-27');
insert into Rating values(205, 104, 2, '2011-01-22');
insert into Rating values(205, 108, 4, null);
insert into Rating values(206, 107, 3, '2011-01-15');
insert into Rating values(206, 106, 5, '2011-01-19');
insert into Rating values(207, 107, 5, '2011-01-20');
insert into Rating values(208, 104, 3, '2011-01-02');

這些是表格。

在問題中編寫示例的方式,您將在字段的字符串值的末尾添加字符串“25”。 它也只適用於字符串(文本)而不是數字字段。 您的示例將更改字段,例如值為“1000”到“100025”。 您可能想要做的是添加到數值。 只需刪除示例中的單引號,即可完成。

UPDATE tableName 
SET fieldName = fieldName + 25

如果您需要定位特定值,請添加到您的條件上方示例的末尾,例如:

WHERE fieldName < 1000

並且只會對符合條件的記錄進行更改。

希望這可以幫助! ;)

編輯:不再與OP改變的問題相關...請僅為了清晰而改變問題, 不要完全改變它的含義! AGRHHH!

對於一個特定的電影ID,您可以使用以下查詢獲得平均評分:

SELECT avg(stars)
FROM Rating
WHERE mID = ?

要更新具有特定平均評分的所有電影,請使用以上作為子查詢:

UPDATE Movie
SET year = year + 25
WHERE (SELECT avg(stars)
       FROM Rating
       WHERE Rating.mID = Movie.mID) >= 4
Update TargetTable
set targetColumn = somevalue
where PrimaryKey = somevalue

如果您沒有primaryKey,則需要找到一些方法來唯一標識該行,否則您可能會冒更新整個表的風險!

Msdn頁面涵蓋了Update語句可以做什么和不能做什么的大部分內容。

編輯:

Update TargetTable
set targetColumn = TargetColumn + somevalue

這將為所有行增加25年

您的代碼將更新所有行中的year

但就像你說你想要特定的值 ,你必須在子句WHERE指定它們:

UPDATE mytable
 SET year = year + 25
 WHERE condition

condition可能是

WHERE mypk > 100

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM