我必须使用表格:(id
,name
)和另一个表格(id
,id_name
,money
)。
在第二张表中我有类似的东西:
1, 1, 200
2, 1, 400
3, 2, 400
在第一个表格中:
1,alex
2,jason
执行查询后,我想收到这个结果:
alex,600
jason,400
这是我的疑问:
SELECT tabel1.nume ,SUM(tabel2.money) FROM tabel2 JOIN tabel2
ON tabel1.id = tabel2.id_name
WHERE tabel1.id = tabel2.id_name ORDER BY SUM(money)
我只收到第二张表的第一行。
我做错了吗?
答案 0 :(得分:1)
您需要使用GROUP BY
SELECT tabel1.name ,SUM(tabel2.money)
FROM tabel2 JOIN tabel2 ON tabel1.id = tabel2.id_name
WHERE tabel1.id = tabel2.id_name
GROUP BY tabel1.name
ORDER BY SUM(money)
如果使用不带GROUP BY
的聚合函数,MySQL会将所有内容分组为单行。
答案 1 :(得分:1)
使用聚合函数时需要使用group by,使用聚合函数而不对它们进行分组将通过将整个表假设为一个组来生成单行,根据您所需的结果集,您还需要DESC
在ORDER BY子句之后
SELECT tabel1.id,
tabel1.nume ,
SUM(tabel2.money) `sum_money`
FROM tabel2
JOIN tabel2 ON tabel1.id = tabel2.id_name
GROUP BY tabel1.id
ORDER BY sum_money DESC
答案 2 :(得分:0)
SELECT
tabel1.nume,
SUM(tabel2.money)
FROM tabel2
JOIN tabel2 ON tabel1.id = tabel2.id_name
GROUP BY tabel1.nume
ORDER BY SUM(money)
你不需要在这里使用where子句,你在JOIN
上已经这样做了
答案 3 :(得分:0)
你需要Group By
SELECT tabel1.id, tabel1.nume, SUM(tabel2.money) `sum_money`
FROM tabel2 JOIN tabel2 ON tabel1.id = tabel2.id_name
WHERE tabel1.id = tabel2.id_name
GROUP BY tabel1.id
ORDER BY sum_money
答案 4 :(得分:0)
首先,查看查询的第一行:
SELECT tabel1.nume ,SUM(tabel2.money) FROM tabel2 JOIN tabel2
除非您没有标题为“' nume'在你的第一个表中,这个tabel1.nume似乎是一个错字,因此造成麻烦。此外,您从tabel2中选择,与tabel2一起加入。这是错误的,您需要使用tabel1而不是tabel2加入。
其次,考虑查询中的第三行:
WHERE tabel1.id = tabel2.id_name
您实际上并不需要在此处放置 WHERE 子句,因为您正在执行tabel1和tabel2之间的连接,因此,您正在使用此行:
ON tabel1.id = tabel2.id_name
实际上它取代了 WHERE 子句。
第三,您需要根据tabel1.id使用 GROUP BY 子句。如果您使用 GROUP BY ,则不再需要使用 ORDER BY 。
总而言之,现在您的更正后的查询应如下所示:
SELECT tabel1.name ,SUM(tabel2.money) FROM tabel2 JOIN tabel1
ON tabel2.id_name = tabel1.id
GROUP BY tabel1.id
希望这能回答你的问题。