SQL Query与另一个表中的count和avg连接

时间:2013-04-25 05:05:51

标签: php mysql sql codeigniter

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

以下是我正在使用的查询以及我正在尝试访问的2个表(包含所有实际数据)。

SQL中的此查询正在提取Steve Smith以获得27个和amount的27个计数。它应该是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

之间的内部联接(使用金额列上的总和和计数)。

我不知道SQL查询,无法弄清楚我的生活。帮助

谢谢,

2 个答案:

答案 0 :(得分: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,以便返回整个用户列表,如果他们没有任何用户,则COUNTSUM的金额将为0。

答案 1 :(得分: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();