我试图通过我的项目上的Branch获得最畅销的产品,但我不知道Sql查询中的问题是什么。
这是我的数据库的架构:
DIM_SOUS_CAT表是产品表,并且每个产品均按“分支”和“类别”进行分类
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 by
和limit
我建议:
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