Mysql 联接中的SQL计数
我只是想统计一下(每个客户的车数) 所以我试着这样:Mysql 联接中的SQL计数,mysql,sql-server,count,inner-join,Mysql,Sql Server,Count,Inner Join,我只是想统计一下(每个客户的车数) 所以我试着这样: SELECT tbl_Clients.FirstName, tbl_Clients.LastName, tbl_Clients.Phone, COUNT(*) AS VehiculeTotal FROM tbl_Contrat INNER JOIN tbl_Clients ON tbl_Contrat.Client = tbl_Clients.ID GROUP BY tbl_Contrat.Client 简单的方法是: SELECT
SELECT tbl_Clients.FirstName, tbl_Clients.LastName, tbl_Clients.Phone,
COUNT(*) AS VehiculeTotal
FROM tbl_Contrat
INNER JOIN tbl_Clients ON tbl_Contrat.Client = tbl_Clients.ID
GROUP BY tbl_Contrat.Client
简单的方法是:
SELECT FirstName, LastName, Phone, COUNT(*) AS VehiculeTotal
FROM tbl_Clients, tbl_Contrat GROUP BY Client
但看起来我也遇到了同样的问题:
Column 'tbl_Clients.FirstName'(LastName and phone too) is invalid in the
select list because it is not contained in
either an aggregate function or the GROUP BY clause.
但我不想和他们在一起
我还需要显示名字、姓氏和电话
当您使用group by时,请提供帮助。结果将根据分组依据的列划分为唯一的组。在您的情况下,tbl_client.id应该是唯一的,因此,如果group by中使用的任何其他列都不是唯一的,则无关紧要。假设您有两个名为John Doe的客户机,客户机id为1和2。分组仍然会根据id将它们分开,并且不会发生进一步的分组 此查询应满足您的要求。我冒昧地为表名使用了别名,以使其更简短、更可读
SELECT cli.FirstName, cli.LastName, cli.Phone, COUNT(*) AS VehiculeTotal
FROM tbl_Contrat con
INNER JOIN tbl_Clients cli ON con.Client = cli.ID
GROUP BY cli.id, cli.FirstName, cli.LastName
请注意,通过使用内部联接,您消除了由于某种原因可能没有任何汽车的任何客户端,这当然可以,但如果您希望返回没有汽车的客户端,则应使用左联接,如下所示:
SELECT id, firstname, lastname, COUNT(tbl_Contrat.Client) AS VehiculeTotal
FROM tbl_Clients
LEFT JOIN tbl_Contrat ON tbl_Contrat.Client = tbl_Clients.ID
GROUP BY id, firstname, lastname
您可以通过将它们包括在
组中。如果您已经按照(可能是唯一的)客户端ID进行分组,那么将不太唯一的名字
、姓氏
和电话
也包括在内是无害的。试一试,您就会明白。另外,由于您收到一条消息,要求使用分组方式
,因此我假设您在SQL Server上,而不是在MySQL上。如果这是真的,请从您的问题中删除MySQL标记。