【问题标题】:SQL Count in a Join连接中的 SQL 计数
【发布时间】:2015-01-01 00:03:50
【问题描述】:

我只是想做一个计数(每个客户的汽车)

所以我尝试这样:

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 中。如果您已经按(可能是唯一的)客户端 ID 进行分组,那么包含不太唯一的 FirstNameLastNamePhone 也是无害的。试试看,你会看到的。
  • 另外,由于您收到一条需要GROUP BY 的消息,我假设您使用的是SQL Server 而不是 使用的是MySQL。如果是这样,请从您的问题中删除 MySQL 标签。

标签: mysql sql-server count inner-join


【解决方案1】:

当您使用 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

【讨论】:

    猜你喜欢
    • 2013-08-25
    • 2015-11-23
    • 2021-10-19
    • 2011-01-14
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多