0

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

这是我的数据库的架构:

在此处输入图像描述

DIM_SOUS_CAT 表是产品表,每个产品都按 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 
) 

请有任何建议!

4

1 回答 1

2

你快到了。就问题而言,您只需要修复子查询:

  • 它需要与外部查询相关联

  • 您不能嵌套聚合表达式,例如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
于 2020-04-17T11:58:19.777 回答