【问题标题】:SQL join tables, total spent by all customersSQL 连接表,所有客户的总花费
【发布时间】:2014-12-06 20:57:12
【问题描述】:

我是 SQL 的新手,这是我一直在努力解决的问题:

我有这些表:

客户(客户 ID、名字、姓氏)

items(itemID, unitcost)

lineitems(数量, orderID, itemID)

订单(订单ID、客户ID、日期)

我需要找到所有下过一份以上订单的客户的姓名和总支出。

SELECT SUM(items.unitcost*lineitems.quantity) AS "total_spent"
FROM orders
INNER JOIN customers
ON orders.custID=customers.custID
GROUP BY firstname
HAVING COUNT(DISTINCT orderID)>1
LIMIT 0,30

【问题讨论】:

  • 是 MySQL 还是 MS SQL Server?你已经标记了两者,但你没有使用 MS SQL Server 语法。
  • 这是 MySQL。我的道歉

标签: mysql sql


【解决方案1】:

我想你只需要继续你的joins

SELECT c.custId, c.firstname, SUM(i.unitcost*li.quantity) total_spent
FROM customers c
    JOIN orders o ON c.custId = o.custId
    JOIN lineitems li ON o.orderId = li.orderId
    JOIN items i ON li.itemId = i.itemId
GROUP BY c.custId, c.firstname
HAVING COUNT(DISTINCT o.orderID)>1
LIMIT 0,30

【讨论】:

  • 需要满足条件是>1 而不是>=1
  • @Rajesh -- 好点,我在重读时注意到了。感谢您的澄清。
  • 确实如此!太感谢了!您能否向我解释一下为什么我需要这么多 JOIN 语句?
  • @gpargian -- 你需要 join 到 lineitmes 和 items 表,这样你就可以总结它们的数量。这可能会有所帮助——只需阅读使用joins——blog.codinghorror.com/a-visual-explanation-of-sql-joins
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多