从数据库中检索按分支机构销售最多的产品的数据

问题描述 投票:0回答:1

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

这是我的数据库的架构:

enter image description here

DIM_SOUS_CAT表是产品表,并且每个产品均按“分支”和“类别”进行分类

DIM_CAT数据:

enter image description here

DIM_BRANCHE数据

enter image description here

DIM_SOUS_CAT数据是产品

enter image description here

FAIT_VENTE数据,即销售清单

enter image description here

我写了一个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 
) 

请提出任何建议!

mysql sql mysql-workbench mysql-error-1064
1个回答
1
投票

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

  • 它需要与外部查询相关

  • 您不能嵌套聚合表达式,例如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,则可以通过窗口函数更有效地完成此操作:

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
© www.soinside.com 2019 - 2024. All rights reserved.