我一直试图弄清楚这一段时间,并决定我不会很快搞清楚!我在这里先向您的帮助表示感谢。喜欢这个地方。
我有2张桌子
日期:
date_id, user_id, cost, title, description
date_rating:
date_id, user_id, rating
我有多个条目具有相同的date_id
但不同的user_id
。换句话说,同一日期的多个评级。评级为1或-1。我想将所有评分与相同的date_id
一起添加,然后将其加入DATE
匹配的date_id
表中。因此我在表DATE
上有一个名为rating的列。这样我可以按评级排序。听起来很简单,但事实证明这并不容易。我想DBA不是我的事!
编辑:MySQL客户端版本:mysqlnd 5.0.8-dev - 20102224 - $ Revision:310735 $
答案 0 :(得分:5)
难道你不能只使用这样的东西吗?我不是MySQL的专家,请注意(我更像是SQL Server人员):
SELECT
date_id, user_id, cost, title, description,
(SELECT SUM(rating) FROM date_rating dr WHERE dr.date_id = d.date_id) AS 'Rating'
FROM
date d
只是一个相关的子查询,以获得由date_id
指定的每个日期的评分总和?
答案 1 :(得分:1)
您可以使用GROUP BY
:
SELECT date.*, SUM(date_rating.rating) AS Rating
FROM date JOIN date_rating USING (date_id)
GROUP BY date_id;
答案 2 :(得分:0)
您必须使用GROUP BY来对收视率求和。我忽略了表格中的费用列。还有,user_id列。似乎只有date_id在这两个表之间是相关的。下面的查询是在SQL Server 2012中编写和测试的,但我认为SELECT语句仍然可以与MySQL一起进行微小的更改。
脚本:
CREATE TABLE dbo.[date]
(
[date_id] INT NOT NULL IDENTITY
, [title] VARCHAR(100) NOT NULL
, [description] VARCHAR(100) NOT NULL
);
CREATE TABLE dbo.[date_rating]
(
[date_id] INT NOT NULL
, [user_id] INT NOT NULL
, [rating] INT NOT NULL
);
INSERT INTO dbo.[date] ([title], [description]) VALUES
('title 1', 'description 1'),
('title 2', 'description 2'),
('title 3', 'description 3');
INSERT INTO dbo.[date_rating] ([date_id], [user_id], [rating]) VALUES
(1, 100, 1),
(1, 200, -1),
(2, 200, -1),
(1, 200, 1),
(3, 200, 1),
(1, 200, -1);
SELECT d.[date_id]
, d.[title]
, d.[description]
, SUM([rating]) AS ratings
FROM dbo.[date] d
INNER JOIN dbo.[date_rating] dr
ON d.date_id = dr.date_id
GROUP BY d.[date_id]
, d.[title]
, d.[description];
输出:
date_id title description ratings
------- ------- ------------- -------
1 title 1 description 1 0
2 title 2 description 2 -1
3 title 3 description 3 1