SQL语句,用于根据总销售额按销售额排名向客户订购



更新:解决了,非常感谢你们的投入。我的问题写得很糟糕,我会记住我的错误。下次我问问题时,我会尽量避免犯错误。谢谢

所以我有几个表(m_member、m_product、t_sales、t_sales_tail、rank),我写了一个查询来获得每个客户的所有订单的总和

SELECT m.name AS m_name, IFNULL(SUM(d.num * p.price), 0) AS price
FROM m_member as m
LEFT JOIN t_sales AS t ON m.id = t.m_id
INNER JOIN m_product as p
LEFT JOIN t_sales_detail as d ON t.id = d.id AND p.id = d.p_id
GROUP BY m.id;

结果如下:

'Kawashima', '2620'
'Kawata', '0'
'Yamada', '15420'
'Nagaoku', '500'
'Nagayama', '380'

现在我想根据下表中的排名来订购这五个客户:

# id, name, low_limit, up_limit
'1', 'Pity', '0', '0'
'2', 'Bronze', '1', '4999'
'3', 'Silver', '5000', '9999'
'4', 'Gold', '10000', '999999999'

例如,名为Kawashima的客户共订购了2620円'.因此他的排名应该是"青铜"。

结果应该如下:

# name, rank
'Kawata', '<custom message>'
'Nagayama', 'Bronze'
'Nagaoku', 'Bronze'
'Kawashima', 'Bronze'
'Yamada', 'Gold'

哦,我想使用一个子查询。

提前谢谢!

SELECT X.M_NAME,X.PRICE,RN.NAME 
FROM
(      
SELECT m.name AS m_name, IFNULL(SUM(d.num * p.price), 0) AS price
FROM m_member as m
LEFT JOIN t_sales AS t ON m.id = t.m_id
INNER JOIN m_product as p
LEFT JOIN t_sales_detail as d ON t.id = d.id AND p.id = d.p_id
GROUP BY m.id
)AS X
JOIN RANK_TABLE AS RN ON X.PRICE BETWEEN RN.LOW_LIMIT AND RN.UP_LIMIT

你能试试这种吗

Select m.id, m.name, price, isnull(rank.name, "No rank") from(SELECT m.id, m.name AS m_name, IFNULL(SUM(d.num * p.price), 0) AS price
FROM m_member as m
LEFT JOIN t_sales AS t ON m.id = t.m_id
INNER JOIN m_product as p
LEFT JOIN t_sales_detail as d ON t.id = d.id AND p.id = d.p_id
GROUP BY m.id)as result left join rank on price <= rank.up_limit and price >= rank.low_limit

最新更新