Mysql SQL-多个case-when函数

Mysql SQL-多个case-when函数,mysql,sql,optimization,Mysql,Sql,Optimization,我有一个问题与我之前发表的帖子有关(参考:) 基本上,我现在尝试使用CASE-WHEN函数来创建各种不同的组。例如,根据上一篇文章中的例子,我有以下几点: SELECT Vehicle_type, case when Number_of_passengers::numeric = 0 then 'cat=0' when Number_of_passengers::numeric < 2 then 'cat1<2' when Number_of

我有一个问题与我之前发表的帖子有关(参考:)

基本上,我现在尝试使用CASE-WHEN函数来创建各种不同的组。例如,根据上一篇文章中的例子,我有以下几点:

SELECT

     Vehicle_type,
     case when Number_of_passengers::numeric = 0 then 'cat=0'
     when Number_of_passengers::numeric < 2 then 'cat1<2'
     when Number_of_passengers::numeric < 3 then 'cat1<3'
     when Number_of_passengers::numeric < 4 then 'cat1<4'
     when Number_of_passengers::numeric < 5 then 'cat1<5'
     when Number_of_passengers::numeric < 6 then 'cat1<6'
     when Number_of_passengers::numeric < 7 then 'cat1<7' 
     when Number_of_passengers::numeric > 2 then 'cat1>2'
     when Number_of_passengers::numeric > 3 then 'cat1>3'
     when Number_of_passengers::numeric > 4 then 'cat1>4'
     when Number_of_passengers::numeric > 5 then 'cat1>5'
     when Number_of_passengers::numeric > 6 then 'cat1>6'
     when Number_of_passengers::numeric > 7 then 'cat1>7'end as category1,
     case when Number_of_doors::numeric = 0 then 'cat2=0'
     when Number_of_doors::numeric > 2 then 'cat2>2'
     when Number_of_doors::numeric > 3 then 'cat2>3'
     when Number_of_doors::numeric > 4 then 'cat2>4'
     when Number_of_doors::numeric > 5 then 'cat2>5'
     when Number_of_doors::numeric > 6 then 'cat2>6'
     when Number_of_doors::numeric > 7 then 'cat2>7' 
     when Number_of_doors::numeric < 2 then 'cat2<2'
     when Number_of_doors::numeric < 3 then 'cat2<3'
     when Number_of_doors::numeric < 4 then 'cat2<4'
     when Number_of_doors::numeric < 5 then 'cat2<5'
     when Number_of_doors::numeric < 6 then 'cat2<6'
     when Number_of_doors::numeric < 7 then 'cat2<7' end as category2,
     round(sum(case when in_accident='t' then 1.0 end)/ count(*),3) as accident_rate,

FROM Accidents

GROUP by 1,2,3 
我的事故率可能只有20%

有什么建议吗


谢谢

与其使用带有案例说明的大型查询,不如创建一个带有车门和乘客数量的汽车描述表,如果汽车符合描述,则在此表中添加带有0/1标签的COL(Cat1>1等)。然后你可以计算出事故率。我认为最好是“去规范化”一点。通过处理表示层中的数据显示问题,可以实现最佳性能。感谢各位的评论,你们制作表格的想法是正确的,我将开始这方面的工作,我希望把它作为一个模板,这样人们可以在看到不同统计数据的原因时编辑变量,因为我的分组不是相互排斥的,他们当然会给出改变的结果
SELECT

    Vehical_type,
    case when Number_of_passengers::numeric > 2 then 'cat1>2' end as category1,
    case when Number_of_doors::numeric > 2 then 'cat2>2' end as category2,
    round(sum(case when in_accident='t' then 1.0 end)/ count(*),3) as accident_rate,

FROM Accidents

GROUP by 1,2,3