考虑数据库:
帐户表
记录:
客户表
记录:
我想得到所有客户的名字和id,在客户ID组织的Overdraft中,所以:
SELECT c.Client_id_number , a.Account_number , c.firstName_client , c.lastName_Client , a.Account_balance
FROM Clients AS c
INNER JOIN Accounts AS a
ON a.Client_id_number = c.Client_id_number
WHERE a.Account_balance < 0
GROUP BY c.Client_id_number;
但是这回来了
表示客户1234
帐号为84
,余额-4000
未出现...我哪里出错了?
答案 0 :(得分:1)
您只按client_id_number
进行分组,这意味着每个客户ID只能获得一行。
您需要按分组输出中要唯一的行集。在这种情况下,这可能意味着:
GROUP BY c.Client_id_number, a.account_number
然后,您应该将聚合函数应用于不属于分组的任何列,例如sum(account_balance)
。
如果您没有使用任何汇总功能,则表明您实际上并不需要分组。
在大多数数据库中,选择任何不在group by语句中的列是错误的,但是MySQL&#34;有帮助地&#34;允许这种查询。它不是返回错误,而是隐藏问题并随机选择剩余列的可能值。
答案 1 :(得分:1)
GROUP BY语句与聚合函数(例如SUM)一起使用,以按一列或多列对结果集进行分组。 如果没有进行任何聚合,则使用ORDER BY
答案 2 :(得分:1)
更新:首先,我应该明确以下内容,您不需要使用&#34;组来&#34;因为您没有总结,所以您的查询应该是:
SELECT c.Client_id_number , a.Account_number , c.firstName_client , c.lastName_Client , a.Account_balance
FROM Clients AS c
INNER JOIN Accounts AS a
ON a.Client_id_number = c.Client_id_number
WHERE a.Account_balance < 0
我注意到你在&#34;组中遇到问题&#34;概念,所以重要的是你知道你需要按照&#34; SELECT&#34;中的每个字段进行分组。除了你总结的那些(c.Client_id_number,a.Account_number)
所以,即
SELECT c.Client_id_number , a.Account_number, sum(a.Account_balance) as balance
FROM Clients AS c
INNER JOIN Accounts AS a
ON a.Client_id_number = c.Client_id_number
WHERE a.Account_balance < 0
GROUP BY c.Client_id_number, a.Account_number;