我多年来一直在使用简单的MySQL命令,并希望进入更复杂的命令。我已经完成了重写我的一些旧代码的任务,但我看不出这里发生了什么。
我正在尝试将两个表合并为一个结果,第二个表只提供“计数”。
TABLE customers:
customerID, name, boxID
TABLE codes:
boxID, code, retrieved
我想要的是我从SELECT * FROM客户那里得到的,但是我想要一个额外的列,其中包含所有代码的count(),其中boxID是相同的。
这是我当前的查询;
SELECT customers.*, count(codes.code) as codesused
FROM customers
INNER JOIN codes
ON customers.boxID = codes.boxID
WHERE codes.retrieved = 1
在我添加“WHERE customers.customerID ='x'”之前,这会导致NULL。有人能够解释为什么我从上面的代码中得不到我想要的东西吗?
答案 0 :(得分:5)
当你将聚合函数与其他字段结合使用时,你必须使用group by子句。您可以像这样进行查询;
SELECT customerID, name, boxID, count(codes.code) as codesused
FROM customers
INNER JOIN codes ON customers.boxID = codes.boxID
GROUP BY customerID, name, boxID, codesused
HAVING codes.retrieved = 1
并且您不能将where子句与group by一起使用,因此您必须使用HAVING