这给出了一个错误:
SELECT
customerName, customerNumber, SUM(amount)
FROM
customers
LEFT JOIN
payments USING (customerNumber)
GROUP BY customers.customerName
ORDER BY customerName;
但是'GROUP BY customer.customerNumber'给出正确的结果。
注意:两个表中都存在'customerNumber',但没有'customerName'。
表“客户”的列:
customerNumber int(11) **PK**
customerName varchar(50)
contactLastName varchar(50)
contactFirstName varchar(50)
“付款”表的列:
customerNumber int(11) **PK**
checkNumber varchar(50) **PK**
paymentDate date
amount decimal(10,2)
这是我们可以在两个表中都存在JOIN BY的GROUP BY列的约束吗?
答案 0 :(得分:0)
您的问题
这是我们可以限制两个表中都存在的GROUP BY列的约束吗? 答:没有这样的规则
我认为以下内容将为您服务,聚合函数的规则是您要投影的列数也必须位于group by
SELECT
c.customerName, c.customerNumber, SUM(amount)
FROM
customers c
LEFT JOIN
payments p on c.customerNumber=p.customerNumber
GROUP BY c.customerName,c.customerNumber
ORDER BY customerName;
答案 1 :(得分:0)
没有这样的约束。我通常会建议在GROUP BY
子句中包括所有未聚合的列:
GROUP BY customerName, customerNumber
(您应该使用别名,但这与该问题无关。)
SQL通常需要。除了一个例外。如果一个(或多个)列是唯一列或主键,则可以执行以下操作:
SELECT c.* -- any or all the columns
. . .
GROUP BY c.customerNumber -- unique or primary key
这解释了为什么此公式有效。但是,customerName
既不是unique
也不是primary key
,所以这是一个错误。
注意:MySQL的较早版本没有施加此约束,因此您可以在聚合查询的GROUP BY
和SELECT
子句中放置任何内容。
答案 2 :(得分:-1)
否,您可以在Join中任何表的任何列上使用Group By。并没有要求该列必须出现在两个表中。
GROUP BY customers.customerName
会导致什么错误?