【问题标题】:SQL - How to find optimal performance numbers for querySQL - 如何找到查询的最佳性能数字
【发布时间】:2017-11-11 09:20:38
【问题描述】:

第一次来,如有失礼请见谅。我对 SQL 的限制有疑问,因为我是代码新手,而且我认为我需要的东西相当复杂。

是否可以自动查找特定查询的最佳数据。例如,假设我有以下列:

1) 车辆类型(文本)例如汽车,自行车,公共汽车

2) 乘客人数(数字) 0-7

3) 发生事故(布尔值),例如t 或 f

从这里,我想得到百分比。因此,如果我只选择有 3 名乘客的汽车,那么这占事故总数的百分比。

我了解如何将其作为一次性或数学计算,但我的问题与如何自动化此过程以获得最佳数字有关。

那么,继续这个例子,假设我只看汽车,多少乘客的事故发生率最高?

目前,我正在逐个测试数字,有没有办法“找到”最佳数字?像示例中那样只有 0-7 时很容易,但我自然希望处理更大的范围甚至多个范围。例如,假设我们添加另一个变量,标题为:

4) 门数(数字)e-g- 0-3

是否有办法从这两个变量中找到涵盖最高事故百分比的数字的最佳组合?

假设我们乘坐的是:汽车,>2 名乘客,

但如果我们将其更改为:汽车,>4 名乘客,

我希望我已经很好地解释了这一点。我知道这对于 SQL 来说很可能是不可能的,但是还有其他方法可以找到这些最佳数字吗?

提前致谢

【问题讨论】:

  • 有几种方法,但最简单的方法是计算每组的事故数量和一组中的总事故数,然后按事故百分比降序排列。
  • 斯隆这很有帮助,谢谢!我想我现在很想进一步了解这一点...... 1)我将如何使用变量组来做到这一点?所以说,可以看看 1 名乘客,然后是 2,然后是 3,然后是 4 等等:我可以看看 >4 与 >5 相比吗
  • 如果你按原样运行它(你真的试过了吗?),你会看到所有可能的结果。如果你想限制特定的值组合,你可以在 where 子句中这样做。
  • 是的,我确实运行过它,效果非常好!这已经非常高效了。我认为这只是我找出如何使用 where 子句来获取这些组的一个案例!所以我的意思是,如果我查看 num_passengers = 1 覆盖 20%,而如果我查看 num_passengers>1 它将覆盖 100%,但也会击中很多非事故组

标签: mysql sql optimization statistics query-optimization


【解决方案1】:

下面的示例将为您提供所有可能性的答案。您可以添加限制子句以仅显示最佳答案,或添加到 where 子句以限制特定术语。

SELECT
    `vehicle_type`,
    `num_passengers`,
    sum(if(`in_accident`,1,0)) as `num_accidents`,
    count(*) as `num_in_group`,
    sum(if(`in_accident`,1,0)) / count(*) as `percent_accidents`
FROM `accidents`
GROUP BY `vehicle_type`,
    `num_passengers`
ORDER BY sum(if(`in_accident`,1,0)) / count(*)

【讨论】:

  • 葛丽泰谢谢!!我会看看我能找到什么!
  • 如果它适合你,别忘了接受答案。
  • 请记住,当您添加/更改项目(例如,vehicle_type、num_doors 等)以将它们与 group by 子句列匹配时。
  • 更简洁,ORDER BY percent_accidents
猜你喜欢
  • 2020-02-14
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
相关资源
最近更新 更多