按解决方案分组

时间:2018-01-16 10:51:27

标签: sql

我有一个查询,我试图运行,不知道如何解决问题,而不是问题。我需要计算一个客户的订单总数,但只显示三月订购的客户。

SELECT customer#, firstname || ', ' || lastname "Customer Name", orderdate, 
COUNT(order#)
FROM orders JOIN customers
USING (customer#)
WHERE orderdate LIKE '%MAR%'
GROUP BY customer#;

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

这里最简单的解决方案可能是将第一个和最后一个客户名称添加到GROUP BY子句中:

SELECT
    customer#,
    firstname || ', ' || lastname "Customer Name",
    COUNT(order#) AS cnt
FROM orders
JOIN customers
USING (customer#)
WHERE orderdate LIKE '%MAR%'
GROUP BY
    customer#,
    firstname || ', ' || lastname

您似乎正在使用自然联接,恕我直言,很难看到在联接过程中实际发生的事情。您可能希望在此处切换到使用显式连接语法。

另请注意,严格来说,上述查询不符合ANSI标准,因为它包含GROUP BY子句中的列函数。这很容易补救;我们可以先使用子查询来连接名字和姓氏,然后再聚合。