[英]How to get sum of two alias tables result in main result in mysql?
我幾乎不需要幫助來簡化mysql查詢。 我有三張桌子。 一個用於主要用戶記錄,第二個用於每個用戶的獎勵積分(每個用戶多個記錄),第三個用於結果點(每個用戶的多個記錄)。
SELECT u.*, (SELECT SUM(ub.Points)
FROM nba_user_bonus AS ub
WHERE ub.UserId = u.Id) AS BonusPoints,
(SELECT SUM(ur.Points)
FROM nba_user_result AS ur
WHERE ur.UserId = u.Id) AS ResultPoints
FROM nba_users AS u
WHERE u.Status = 'Enable'
ORDER BY u.Id ASC
在這里,我為每個用戶提供了總的獎勵積分和總結果積分,但是我需要該TotalPoints DESC為每個用戶訂單提供TatalPoint(結果積分與獎勵積分之和)。 總的來說,我想要排行榜的用戶列表。
請問我是否需要數據庫表的更多詳細信息。 希望能為您提供幫助。
您的查詢是合理的。 您可以將兩個值加在一起:
SELECT u.*,
((SELECT SUM(ub.Points) FROM nba_user_bonus ub WHERE ub.UserId = u.Id) +
(SELECT SUM(ur.Points) FROM nba_user_result ur WHERE ur.UserId = u.Id)
) as TotalPoints
FROM nba_users AS u
WHERE u.Status = 'Enable'
ORDER BY TotalPoints desc;
如果需要所有三個值,則可以使用子查詢或重復計算:
SELECT u.*, (BonusPoints + ResultPoints) as TotalPoints
FROM (SELECT u.*,
(SELECT SUM(ub.Points) FROM nba_user_bonus ub WHERE ub.UserId = u.Id) as BonusPoints,
(SELECT SUM(ur.Points) FROM nba_user_result ur WHERE ur.UserId = u.Id) as ResultPoints
FROM nba_users AS u
WHERE u.Status = 'Enable'
) u
ORDER BY TotalPoints desc;
您也可以將此短語表述為與分組依據一起加入。 但是,這種帶有select
子查詢的方法可能比該方法更快。
編輯:
要在第一種情況下處理NULL
,請使用ifnull()
或coalesce()
:
SELECT u.*,
(coalesce((SELECT SUM(ub.Points) FROM nba_user_bonus ub WHERE ub.UserId = u.Id), 0) +
coalesce((SELECT SUM(ur.Points) FROM nba_user_result ur WHERE ur.UserId = u.Id), 0)
) as TotalPoints
FROM nba_users AS u
WHERE u.Status = 'Enable'
ORDER BY TotalPoints desc;
而不是在語句的SELECT部分中進行子查詢,請使用聯接。 然后在末尾添加GROUP BY,這樣您將獲得不同的U.ID和UR和UB總數。
SELECT
u.ID,
SUM(ub.Points)+ SUM(ur.Points) as TotalPoints
FROM
nba_users AS u
LEFT OUTER JOIN nba_user_bonus as ub on
u.ID = ub.userid
LEFT OUTER JOIN nba_user_result as ur on
u.ID = ur.userid
WHERE u.STATUS = 'Enable'
GROUP BY 1
ORDER BY u.Id ASC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.