从表中获取特定用户的所有行以及总和

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

【讨论】:

以上是关于从表中获取特定用户的所有行以及总和的主要内容,如果未能解决你的问题,请参考以下文章

MYSQLI 从表中获取结果:显示所有用户(但首先显示豪华和高级用户)? [复制]

以递归方式从表中获取值

根据特定条件从表中获取已插入数据的插入查询

使用 MySQL 从表中获取特定列表,然后获取剩余的列表

我想从表中获取行 ID

从表中的 json 中获取单个项目