求和一个表,其中列与另一个表匹配并加入结果

时间:2012-04-28 19:53:49

标签: mysql sql subquery sum

我一直试图弄清楚这一段时间,并决定我不会很快搞清楚!我在这里先向您的帮助表示感谢。喜欢这个地方。

我有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 $

3 个答案:

答案 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