0

所以有一个客户列表,有一个客户列表。

我有 2 张桌子,customers并且invoices.

Customer_id对于我的客户来说可能是一样的,例如

客户A

Customer #1

客户 B

Customer #1

因此对于不同的客户,发票表的 customer_id 可以为 1。

下面的查询有效,但似乎有点混乱。有什么想法可以清理吗?

  SELECT   name, 
           sum(sub_total) total
    FROM   customers, invoices
   WHERE   customer_id = 1438 and 
           invoices.customer_id = 1438 and 
           customers.customer_id = invoices.customer_id 
GROUP BY   name 
Order By   total DESC;
4

3 回答 3

4

如果A = B然后你不需要检查它...... (相信我A = 1438, 我在高中的数学获得了60+ )B = 1438

SELECT   name, sum(sub_total) total    
FROM     customers, invoices    
WHERE    invoices.customer_id  = 1438
AND      customers.customer_id = invoices.customer_id 
GROUP BY name 
ORDER BY total DESC;

或者明确说明您想要哪种类型的 JOIN:

SELECT   name, sum(sub_total) total    
FROM     customers  INNER JOIN invoices 
ON       customers.customer_id = invoices.customer_id 
WHERE    invoices.customer_id  = 1438
GROUP BY name 
ORDER BY total DESC;
于 2012-05-14T00:33:28.240 回答
1

你不需要额外的检查...

SELECT name, sum(sub_total) total
FROM customers, invoices
WHERE 
customer_id = 1438 and 
customers.customer_id = invoices.customer_id 
GROUP BY name order by total DESC;
于 2012-05-14T00:32:45.810 回答
1

我强烈不会按名称进行分组...假设您有两个名为“Bill Smith”的客户,但一个是客户 ID 10,另一个是客户 ID 785...您只是将它们组合成一个人。您应该按 ID 分组,而不是按名称...

现在,也就是说,无论如何您只查询一个客户 ID,并且只会返回一条记录。如果您真正想要完成的是获取所有客户及其各自发票的全部内容,请删除单个客户的 where 子句。您可以按 ID 保留组,但显示实际客户的姓名。如果您有多个客户的总数相同,您可以按他们的姓名进行子排序,但分组仍然仅基于客户的 ID。

SELECT
      c.name, 
      sum(i.sub_total) total
   FROM
      customers
         JOIN invoices
            on c.Customer_ID = i.Customer_ID
   GROUP BY
      c.customer_ID 
   Order By
      total DESC,
      c.Name
于 2012-05-14T02:01:58.433 回答