该查询旨在显示来自按customerid分组的tbltransactions的所有记录,并从两个表的customerid匹配的tblcustomers中挑选客户名称。
select
a.customerid,
sum(transactionamount) as transactionamount,
b.customername
from
tbltransactions a,
tblcustomers b
where
a.customerid = b.customerid
group by customerid
order by b.customername
此查询是否确保tbltransactions中的所有记录都正确显示。我是MySQL和php的新手。感谢
其次:
当我添加“a”时。求和(transactionamount)作为transactionamount“它产生错误为什么会这样?而且它是什么样的连接查询。
答案 0 :(得分:0)
试试这个..
select a.customerid, sum(transactionamount) as transactionamount, b.customername from tbltransactions a INNER JOIN tblcustomers b ON a.customerid = b.customerid group by customerid order by b.customername
答案 1 :(得分:0)
在ANSI SQL中,使用GROUP BY
时无法选择非聚合列。只能选择聚合列和聚合函数。
在您的查询中,无法选择b.customername
,因为只有a.customerid
是聚合列。
但MySQL实现了非标准。因此,如果a.customerid
和b.customername
具有一对一的关系,那么您的查询可以正常运行而不会出现语法错误并产生正确的结果。
但有效的SQL语法如下:
SELECT a.customerid, transactionamount,
b.customername
FROM (
SELECT
customerid,
SUM(transactionamount) as transactionamount,
FROM
tbltransactions
GROUP BY customerid
) AS a INNER JOIN tblcustomers b ON a.customerid = b.customerid
ORDER BY b.customername;
使用SET sql_mode = 'ONLY_FULL_GROUP_BY';
感谢您阅读我糟糕的英语。