gpt4 book ai didi

php - 如何获取mysql中主结果中两个别名表结果的总和?

转载 作者:行者123 更新时间:2023-11-29 12:42:14 24 4
gpt4 key购买 nike

我需要一点帮助来简化我的 mysql 查询。我有三张 table 。第一个用于主要用户记录,第二个用于每个用户的奖励积分(每个用户多个记录),第三个用于结果点(每个用户多个记录)。

查询

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;

您还可以将其表述为与 group by 的连接。但是,这种在 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;

关于php - 如何获取mysql中主结果中两个别名表结果的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25948411/

24 4 0
文章推荐: ios - 将 ID 存储在 C 数组中
文章推荐: mySQL - 输出两个计算字段的总和
文章推荐: php - 如何在 php 中使用