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

Mysql 从数据库中检索按分支机构列出的最畅销产品的数据,mysql,sql,mysql-workbench,mysql-error-1064,Mysql,Sql,Mysql Workbench,Mysql Error 1064,我试图在我的项目中按分支获得最畅销的产品,但我不知道我的Sql查询有什么问题 以下是我的数据库的架构: DIM_SOUS_CAT表是产品表,每个产品按分支和类别进行分类 DIM_CAT数据: DIM_分支数据 DIM\u SOUS\u CAT数据是产品 FAIT_Vent数据,即销售列表 我编写了一个sql查询,但它不起作用。以下是查询: select vf.id_branche, vf.id_categorie, count(*) from vente_fact vf GROUP

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

以下是我的数据库的架构:

DIM_SOUS_CAT表是产品表,每个产品按分支和类别进行分类

DIM_CAT数据:

DIM_分支数据

DIM\u SOUS\u CAT数据是产品

FAIT_Vent数据,即销售列表

我编写了一个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(*)
    ;这将需要额外的聚合级别-相反,您可以
    排序和
    限制

我建议:

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

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

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

  • 不能嵌套聚合表达式,如
    MAX(COUNT(*)
    ;这将需要额外的聚合级别-相反,您可以
    排序和
    限制

我建议:

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

您不能嵌套聚合函数
max(COUNT(*)
是的,您是对的!但是我需要获得Branchy销售的产品的最大数量您不能嵌套聚合函数
max(COUNT(*)
是的,您是对的!但我需要得到分公司销售的产品的最大数量