【发布时间】:2015-05-12 09:36:58
【问题描述】:
在 SQL 中有一个查询,我被严重卡住了,我已经尝试了所有可能的方法,但无法获得解决方案。我有 4 个表,分别命名为:user、item、buys、rates。
CREATE TABLE User (
id integer,
name varchar(30),
Primary Key (id)
)
INSERT INTO User(id, name)
VALUES
('1', 'Lorren'),
('2', 'Smith'),
('3', 'Stephen'),
('4', 'David'),
('5', 'Sophie'),
('6', 'Alex'),
('7', 'Henry'),
('8', 'Jasmine'),
('9', 'Anderson'),
('10', 'Bilal')
CREATE TABLE Item (
id integer,
description varchar(50),
category varchar(30),
price integer,
Primary Key (id)
)
INSERT INTO Item(id, description, category, price)
VALUES
('50', 'Princess Diary', 'Book', '8'),
('51', 'Frozen', 'Book', '4'),
('52', 'Tangled', 'Book', '3'),
('53', 'Oak Table', 'Furniture', '370'),
('54', 'Doble Bed', 'Furniture', '450'),
('55', 'Metal Cupboard', 'Furniture', '700'),
('56', 'Levi 501', 'Clothes', '90'),
('57', 'Corduroy Coat', 'Clothes', '230'),
('58', 'Straight Trousers', 'Clothes', '45'),
('59', 'Black Sequin Top', 'Clothes', '85')
CREATE TABLE Buys (
user integer,
item integer,
price integer,
Primary Key (user, item),
Foreign key (user) REFERENCES User(id),
Foreign Key (item) REFERENCES Item(id)
)
INSERT INTO Buys
VALUES ('1', '52', '3'),
('1', '56', '90'),
('2','56','100'),
('2', '54', '450'),
('5', '53', '400'),
('5', '55', '700'),
('5', '59', '90'),
('6', '57', '230'),
('10', '58', '50'),
('8', '50', '8')
CREATE TABLE Rates (
user integer,
item integer,
rating integer CHECK (0<=rating<=5),
Primary Key (user, item),
Foreign key (user) REFERENCES User(id),
Foreign Key (item) REFERENCES Item(id)
)
INSERT INTO Rates
VALUES
('1', '52', '5'),
('1', '56', '3'),
('2', '54', '5'),
('2', '55', '4'),
('2', '56', '2'),
('5', '53', '5'),
('5', '55', '5'),
('8', '50', '1'),
('8', '55', '3'),
('9', '55', '4')
我必须针对每个用户查找他未购买的所有商品,但仅显示其中具有/具有最高平均评分的那些商品/商品。所以结果应该只显示那些不是他买的并且具有最高平均评分的项目。评分为 1-5,每个项目可能有不同的评分,因此可以计算每个项目的平均评分,但我无法找出每个用户没有购买的平均评分最高的项目。我在 MYSQL 中工作,我在这里被困了 6 天,甚至我的朋友都试过没有人能解决它。有人可以帮忙吗?
考虑到当前表的预期输出应该是这样的:
User Items With Highest Average
Lorren 53
Lorren 54
Smith 52
Smith 53
Stephen 52
Stephen 53
Stephen 54
David 52
David 53
David 54
Sophie 52
Sophie 54
Alex 52
Alex 53
Alex 54
Henry 52
Henry 53
Henry 54
Jasmine 52
Jasmine 53
Jasmine 54
Anderson 52
Anderson 53
Anderson 54
Bilal 52
Bilal 53
Bilal 54
【问题讨论】:
-
你能添加预期的结果吗?
-
你为什么不尝试一些你认为最接近的尝试。没有它,它确实有点像家庭作业交接......
-
我猜你忘记了 [Ratings] 表中的 [Rating] 列
-
@jean 类似的家庭作业,我已经完成了剩下的十几个查询,只有一个没有解决,它不像你写的那么简单,你读过吗?我们必须为每个查询找到项目用户,不是他买的,平均评分最高,所以会使用聚合 avg() 但我怎么想不通
-
您了解并熟悉子选择,或者在 MySQL 术语中,子查询?他们可能会帮助你去这里。 dev.mysql.com/doc/refman/5.0/en/subqueries.html
标签: mysql sql database wordpress