添加行"输入"基于获奖产品

时间:2016-08-12 19:05:36

标签: mysql sql

我有一张名为' 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。

1 个答案:

答案 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
                );