查询以使用 JOIN 和订单花费金额的 sum () 获取客户列表
query to get customer list using JOIN with sum () of the amounts spent in orders
我有以下 tables
table anag(客户注册表)
id | surname | name | phone |
----------------------------------------------
1 | Brown | Jack | +3989265781 |
2 | Smith | Bill | +3954872358 |
3 | Rogers | Stan | +3912568453 |
4 | Pickford | Eric | +3948521358 |
----------------------------------------------
table levels (table 将每个客户与其销售人员联系起来。出于数据库注册原因,客户和卖家之间的 link由客户的电话号码给出)
id | client_phone | id_seller |
--------------------------------------
1 | +3989265781 | 4 |
2 | +3954872358 | 7 |
3 | +3912568453 | 7 |
4 | +3948521358 | 8 |
--------------------------------------
table 订单(当然包含客户的所有购买)
id | id_client | id_item | id_seller | price | status |
--------------------------------------------------------------------
1 | 1 | 2 | 4 | 12.50 | 2 |
2 | 2 | 2 | 7 | 12.50 | 2 |
3 | 2 | 3 | 7 | 10.00 | 3 |
4 | 2 | 3 | 7 | 10.00 | 3 |
5 | 2 | 4 | 7 | 20.50 | 1 |
6 | 3 | 2 | 7 | 12.50 | 1 |
7 | 3 | 5 | 7 | 19.00 | 3 |
8 | 3 | 7 | 7 | 31.00 | 2 |
9 | 4 | 1 | 8 | 5.00 | 1 |
--------------------------------------------------------------------
我想做的是从这些 tables 的 JOIN 中得到一个完整的列表,由卖方的客户按订单花费的金额降序排序,只要订单状态为 2或 3
像这样(例如卖家 ID 7):
id | surname | name | amaount |
----------------------------------------
3 | Rogers | Stan | 50.00 |
2 | Smith | Bill | 32.50 |
----------------------------------------
我已经尝试过这个查询,这对我来说似乎是正确的,但不幸的是 return 是我在 fetch_assoc()
中的错误
SELECT a.id, a.surname, a.name, o.amount FROM levels AS l
JOIN anag AS a ON a.phone = l.client_phone
JOIN {
SELECT id_client, SUM(price) AS amount FROM orders
WHERE id_seller = '7' AND (status = '2' OR status = '3') GROUP BY id_client
} AS o ON o.id_client = a.id
WHERE l.id_seller = '7'
ORDER BY o.amount DESC
如果我将子查询与主查询分开,return 我期望的数据和两者之间的 JOIN 对我来说似乎很奇怪
我认为唯一真正的错误是使用大括号而不是圆括号:
SELECT a.id, a.surname, a.name, o.amount
FROM levels l JOIN
anag a
ON a.phone = l.client_phone JOIN
(SELECT id_client, SUM(price) AS amount
FROM orders
WHERE id_seller = '7' AND status IN ('2', '3'))
GROUP BY id_client
) o
ON o.id_client = a.id
WHERE l.id_seller = '7'
ORDER BY o.amount DESC;
另外:
- 您可以使用
IN
来缩短对多个值的相等比较。
- 虽然我把它们留在了里面,
status
和 id_seller
看起来像数字。如果是这样,请删除单引号。不要混合数据类型。
- 如果
orders
中的卖家与 anag
中的卖家不同,您的问题不明确怎么办。这符合你的逻辑(卖家需要匹配)。
SELECT a.id, a.surname, a.name, sum(o.price) 'amount'
来自阿纳格
LEFT JOIN levels l ON l.id =a.id
LEFT JOIN 订单 o.id_seller = l.id_seller AND o.id_client = l.id
分组依据o.id_seller
按金额降序排列
我有以下 tables
table anag(客户注册表)
id | surname | name | phone |
----------------------------------------------
1 | Brown | Jack | +3989265781 |
2 | Smith | Bill | +3954872358 |
3 | Rogers | Stan | +3912568453 |
4 | Pickford | Eric | +3948521358 |
----------------------------------------------
table levels (table 将每个客户与其销售人员联系起来。出于数据库注册原因,客户和卖家之间的 link由客户的电话号码给出)
id | client_phone | id_seller |
--------------------------------------
1 | +3989265781 | 4 |
2 | +3954872358 | 7 |
3 | +3912568453 | 7 |
4 | +3948521358 | 8 |
--------------------------------------
table 订单(当然包含客户的所有购买)
id | id_client | id_item | id_seller | price | status |
--------------------------------------------------------------------
1 | 1 | 2 | 4 | 12.50 | 2 |
2 | 2 | 2 | 7 | 12.50 | 2 |
3 | 2 | 3 | 7 | 10.00 | 3 |
4 | 2 | 3 | 7 | 10.00 | 3 |
5 | 2 | 4 | 7 | 20.50 | 1 |
6 | 3 | 2 | 7 | 12.50 | 1 |
7 | 3 | 5 | 7 | 19.00 | 3 |
8 | 3 | 7 | 7 | 31.00 | 2 |
9 | 4 | 1 | 8 | 5.00 | 1 |
--------------------------------------------------------------------
我想做的是从这些 tables 的 JOIN 中得到一个完整的列表,由卖方的客户按订单花费的金额降序排序,只要订单状态为 2或 3
像这样(例如卖家 ID 7):
id | surname | name | amaount |
----------------------------------------
3 | Rogers | Stan | 50.00 |
2 | Smith | Bill | 32.50 |
----------------------------------------
我已经尝试过这个查询,这对我来说似乎是正确的,但不幸的是 return 是我在 fetch_assoc()
中的错误SELECT a.id, a.surname, a.name, o.amount FROM levels AS l
JOIN anag AS a ON a.phone = l.client_phone
JOIN {
SELECT id_client, SUM(price) AS amount FROM orders
WHERE id_seller = '7' AND (status = '2' OR status = '3') GROUP BY id_client
} AS o ON o.id_client = a.id
WHERE l.id_seller = '7'
ORDER BY o.amount DESC
如果我将子查询与主查询分开,return 我期望的数据和两者之间的 JOIN 对我来说似乎很奇怪
我认为唯一真正的错误是使用大括号而不是圆括号:
SELECT a.id, a.surname, a.name, o.amount
FROM levels l JOIN
anag a
ON a.phone = l.client_phone JOIN
(SELECT id_client, SUM(price) AS amount
FROM orders
WHERE id_seller = '7' AND status IN ('2', '3'))
GROUP BY id_client
) o
ON o.id_client = a.id
WHERE l.id_seller = '7'
ORDER BY o.amount DESC;
另外:
- 您可以使用
IN
来缩短对多个值的相等比较。 - 虽然我把它们留在了里面,
status
和id_seller
看起来像数字。如果是这样,请删除单引号。不要混合数据类型。 - 如果
orders
中的卖家与anag
中的卖家不同,您的问题不明确怎么办。这符合你的逻辑(卖家需要匹配)。
SELECT a.id, a.surname, a.name, sum(o.price) 'amount'
来自阿纳格
LEFT JOIN levels l ON l.id =a.id
LEFT JOIN 订单 o.id_seller = l.id_seller AND o.id_client = l.id
分组依据o.id_seller
按金额降序排列