2016-04-24 49 views
-3

我正在尝试从列Product_ID(FK)中选择应该与BRANCH_ID(FK)一起列出的最畅销商品,例如分支1的销售量最高的商品,然后是分支2的销售量最高的商品等。这些是所有在我的表中称为销售。SQL - 如何从一列中选择最常出现的条目并将其与另一列一起列出?

有没有一个查询,允许我这样做?

任何帮助表示赞赏

+0

如果添加的表结构和示例数据和预期输出... –

回答

0

如果一个行是一个订单项目,然后像这样将有助于:

SELECT 
    s.branch_id 
    , s.product_id 
    , s.qnty 
FROM (
    SELECT 
     branch_id 
     , s.product_id 
     , COUNT(*) AS qnty 
     , RANK() OVER(PARTITION BY s.branch_id ORDER BY COUNT(*) DESC) AS [rank] 
    FROM dbo.sales AS s 
    GROUP BY s.branch_id, s.product_id 
) s 
WHERE s.rank = 1 
ORDER BY branch_id 

如果两个项目卖掉他们都将出现在相同的金额。

没有表定义我不能帮你进一步。

0

对于MySQL:

select distinct s1.BRANCH_ID, s1.Product_ID 
from SALES s1 
where s1.Product_ID = (
    select s2.Product_ID 
    from SALES s2 
    where s2.BRANCH_ID = s1.BRANCH_ID 
    group by s2.Product_ID 
    order by count(1) desc 
    limit 1 
); 

或者更好:

select b.BRANCH_ID, (
    select s2.Product_ID 
    from SALES s2 
    where s2.BRANCH_ID = b.BRANCH_ID 
    group by s2.Product_ID 
    order by count(1) desc 
    limit 1 
) as Product_ID 
from BRANCHES b; 

http://sqlfiddle.com/#!9/5aaf65/4

相关问题