我有一张名为' CustomerSales'的表。客户定期购买多种产品。我想创建一个查看所有客户的查询,并选择最畅销的产品插入一行,其中包含最畅销产品的名称。
实施例。
Customer-Product-Sales
Joe-1a $200
Joe-2a $10
Joe-3a $100
Alice-2a $400
Alice-3a $300
Alice-1a $50
Dawn-3a $1000
Dawn -2a $50
Dawn -1a $10
例如,根据这些数据,我想在我的查询中插入一行,说明Joe' Top Product'是1a,Alice是2a,Dawn是3a。
答案 0 :(得分:1)
如果您的数据不是很大,那么substring_index()
/ group_concat()
诀窍非常有效:
select customer,
substring_index(group_concat(product order by sales desc), ',', 1) as TopProduct
from t
group by customer;
这是另一种没有group by
的方法:
select t.*
from t
where t.sales = (select max(t2.sales) from t t2 where t2.customer = t.customer);
此方法的问题在于,首先绑定的产品将在输出中产生多行。你可以通过选择其中任意一个来解决这个问题:
select t.*
from t
where t.sales = (select t2.sales
from t t2
where t2.customer = t.customer
order by t2.sales desc
limit 1
);