簡體   English   中英

如何獲取兩個別名表的總和導致mysql的主要結果?

[英]How to get sum of two alias tables result in main result in mysql?

我幾乎不需要幫助來簡化mysql查詢。 我有三張桌子。 一個用於主要用戶記錄,第二個用於每個用戶的獎勵積分(每個用戶多個記錄),第三個用於結果點(每個用戶的多個記錄)。

QUERY

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM