-3

实际上,数学似乎并没有加起来。

这是我正在使用的查询和我正在尝试访问的 2 个表(包含所有真实数据)。

SQL 中的此查询将Steve Smith获得 27 个 sum 和 27 个amount. 它应该是 17。在同一个查询中,它显示John Smith有 4 个总和和 2 个计数amount

SELECT
user.*,
IFNULL(SUM(collection.amount), 0) AS usertotal,
COUNT(collection.amount) AS userunique
FROM user
LEFT JOIN collection
ON user.id = collection.userid
GROUP BY collection.amount`

表1(命名user):

id | firstname | lastname | username | email
1  | Steve     | Smith    | SteveS   | Steve@Smith.com
2  | John      | Smith    | JohnSmith| John@Smith.com

表2(命名collection):

id|userid|carid |amount
1   1   74  1
10  2   130 1
11  2   48  1
12  2   414 1
13  2   415 1
14  2   66  1
15  2   404 1
16  2   57  2
17  2   331 1
18  2   264 1
19  2   325 1
20  2   51  2
21  2   185 1
24  1   168 1
25  1   11  1
26  1   315 1
27  1   51  1
28  1   210 1
29  1   433 1
30  1   434 1
31  1   460 1
32  1   75  1
33  1   238 1
34  1   226 1
35  1   396 1
36  1   174 1
37  1   12  1
38  1   328 1
39  1   4   1



id| UN | Amount
1 | 4  | 457
2 | 4  | 28
3 | 2  | 234
4 | 1  | 235
5 | 2  | 1

我需要一个查询来获取用户名的整个列表,以及 user.id 和 collection.UN 之间的内部连接(在数量列上使用 sum 和 count)

我不知道 SQL 查询,一辈子都搞不清楚。帮助?

谢谢,

4

2 回答 2

5
SELECT 
  user.UN as username, 
  IFNULL(SUM(collection.Amount), 0) AS sum,
  COUNT(collection.Amount) AS count
FROM user
LEFT JOIN collection
  ON user.id = collection.UN
GROUP BY user.id

您说要使用INNER JOIN,但不会显示那些在集合表中没有记录的用户。因此,我使用LEFT JOIN了这样的方式,以便返回整个用户列表,如果他们没有,他们的金额COUNT和金额将为 0。SUM

于 2013-04-25T05:18:20.437 回答
0

用这个:

    select u.* , c.total_amount from users as u 
inner join (select un, sum(amount) total_amount 
from collection group by un)  c on u.id = c.un

PHP 查询:

 $q = "select u.* , c.total_amount from users as u 
inner join (select un, sum(amount) total_amount 
from collection group by un)  c on u.id = c.un";    
    $result = $this->db->query($q);
    //echo $this->db->last_query();
于 2013-04-25T05:20:44.167 回答