从数据库中检索数据,按分支机构列出最畅销的产品

retrieve data from a database the most sold products by branch

我正在尝试通过 Branch 在我的项目中获得最畅销的产品,但我不知道我的 Sql 查询有什么问题。

这是我的数据库的架构:

DIM_SOUS_CAT table 是产品 table 并且每个产品都按 Branch 和 Category 分类

DIM_CAT 数据:

DIM_BRANCHE数据

DIM_SOUS_CAT数据即产品

FAIT_VENTE数据,即销量榜单

我写了一个 sql 查询,但它不起作用。这是查询:

select vf.id_branche, vf.id_categorie, count(*) 
from vente_fact vf 
GROUP by vf.id_branche, vf.id_categorie  
HAVING count(*) = (  
   SELECT max(COUNT(*)) 
   FROM vente_fact vf2  
   GROUP by vf2.id_branche, vf2.id_categorie 
) 

有什么建议吗!

你快到了。至于问题,你只需要修复子查询:

  • 需要关联外层查询

  • 你不能嵌套聚合表达式,比如MAX(COUNT(*));这将需要额外的聚合级别 - 相反,您可以 order bylimit

我建议:

select 
    vf.id_branche, 
    vf.id_categorie, 
    count(*) no_ventes
from vente_fact vf 
group by vf.id_branche, vf.id_categorie 
having count(*) = (
    select count(*) 
    from vente_fact vf2 
    where vf2.id_branche = vf1.id_branche
    order by count(*) desc
    limit 1 
)

请注意,如果您是 运行 MySQL 8.0,使用 window 函数可以更有效地完成此操作:

select id_branche, id_categorie, no_ventes
from (
    select 
        id_branche, 
        id_categorie, 
        count(*) no_ventes,
        rank() over(partition by id_branche order by count(*) desc) rn
    from vente_fact vf 
    group by id_branche, id_categorie 
) t
where rn = 1