实际上数学似乎并没有加起来。
以下是我正在使用的查询以及我正在尝试访问的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查询,无法弄清楚我的生活。帮助
谢谢,
答案 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
,以便返回整个用户列表,如果他们没有任何用户,则COUNT
和SUM
的金额将为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();