从表中获取特定用户的所有行以及总和
Posted
技术标签:
【中文标题】从表中获取特定用户的所有行以及总和【英文标题】:Get all rows from a table for a particular user along with sum 【发布时间】:2014-01-24 13:42:46 【问题描述】:我有一个名为real_estate的表,其结构和数据如下:-
| id | user_id | details | location | worth
| 1 | 1 | Null | Null | 10000000
| 2 | 1 | Null | Null | 20000000
| 3 | 2 | Null | Null | 10000000
我的查询如下:
SELECT * , SUM( worth ) as sum
FROM real_estate
WHERE user_id = '1'
我从这个查询中得到的结果是
| id | user_id | details | location | worth | sum
| 1 | 1 | Null | Null | 10000000 | 30000000
我希望结果像
| id | user_id | details | location | worth | sum
| 1 | 1 | Null | Null | 10000000 | 30000000
| 2 | 1 | Null | Null | 20000000 | 30000000
有什么方法可以按照我想要的方式获得结果,或者我应该编写 2 个不同的查询吗? 1)得到总和的价值 2)获取该用户的所有行
【问题讨论】:
【参考方案1】:您需要使用一个子查询来计算每个用户的总和,然后将子查询的结果与您的表 JOIN:
SELECT real_estate.*, s.user_sum
FROM
real_estate INNER JOIN (SELECT user_id, SUM(worth) AS user_sum
FROM real_estate
GROUP BY user_id) s
ON real_estate.user_id = s.user_id
WHERE
user_id = '1'
但如果您只需要返回单个用户的记录,您可以使用:
SELECT
real_estate.*,
(SELECT SUM(worth) FROM real_estate WHERE user_id='1') AS user_sum
FROM
real_estate
WHERE
user_id='1'
【讨论】:
非常感谢我想要的答案我只是怀疑它会影响性能..??【参考方案2】:你可以在这样的子查询中求和
SELECT * , (select SUM(worth) from real_estate WHERE user_id = '1' ) as sum
FROM real_estate WHERE user_id = '1'
【讨论】:
抛出错误 #1064 - 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 1 行的 'selectworth from real_estate WHERE user_id = '1' ) FROM real_estate WHERE use' 附近使用正确的语法 如果我有大约 100 万用户,上述查询会影响性能吗?【参考方案3】:按id
分组SELECT * , SUM( worth ) as sum FROM real_estate WHERE user_id = '1' group by id
【讨论】:
以上是关于从表中获取特定用户的所有行以及总和的主要内容,如果未能解决你的问题,请参考以下文章