![](/img/trans.png)
[英]Left join where there are 2 results in one table, doubles the sum of results from a corresponding table
[英]Sum one table where columns match another table and join the results
我已經嘗試了好一陣子了,並決定不打算很快解決這個問題! 我在這里先向您的幫助表示感謝。 愛這個地方。
我有2張桌子
日期:
date_id, user_id, cost, title, description
date_rating:
date_id, user_id, rating
我有多個條目具有相同的date_id
但具有不同的user_id
。 換句話說,同一日期的多個評分。 評級為1或-1。 我想將所有評分與相同的date_id
一起添加,然后將其加入到date_id
匹配的DATE
表中。 這樣我在表DATE
上有一個稱為rating的列。 這樣,我可以按評分排序。 聽起來很簡單,但事實證明並非如此。 我猜DBA不是我的事!
編輯:MySQL客戶端版本:mysqlnd 5.0.8-dev-20102224-$修訂:310735 $
你不能只使用這樣的東西嗎? 我不是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
指定的每個日期的評分總和?
您可以使用GROUP BY
:
SELECT date.*, SUM(date_rating.rating) AS Rating
FROM date JOIN date_rating USING (date_id)
GROUP BY date_id;
您必須使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.