【发布时间】:2017-05-14 03:24:13
【问题描述】:
我想计算有多少司机开得太快了。我有一张桌子 交通。 在每一行的这张表中,我可以看到有多少汽车以不同的速度类别行驶。对于这个问题,我只需要从 amount_drivers1 到 amount_drivers10 的列。
我在表 speedcategories 中有十个不同的速度类别(例如 speed_categorie 列 1-10 的值是:20,30,40,50,60,70,80,90,100,110) 这些方式各不相同。对于每一行,我必须找到每种方式的速度类别。 speed_categorie1与amount_drivers1有关,speed_categorie2与amount_drivers2有关……
然后我必须使用表 MAX_SPEED 中的列 max_speed。我必须遍历每个 speed_categorie 列以查看 speed_categorie 是否高于 max_speed 列。如果不是什么也不做,如果是,则必须将交通表中的汽车数量(列 amount_drivers 的值)纳入“to_hard”列。
max_speed、speed_categories 和流量表之间的关系是 id 编号。这些是外键。这是图表:
例如 max_speed=60(来自 max_speed_table)。那么只有速度类别 70,80,90,100 和 110(来自 speed_categorie 表)符合条件。然后来自amount_drivers6、amount_drivers7、amount_drivers8、amount_drivers9和amount_drivers10(来自流量表)的驱动程序数量必须进入“to_hard”列。因此,在这种情况下,这是amount_drivers6、amount_drivers7、amount_drivers8、amount_drivers9 和amount_drivers10 列的总和。这个总和必须在“to_hard”列中。
【问题讨论】:
-
虽然是编程的标准方法,但循环不是 SQL 的方法。您需要编写一个同时检查所有行的查询,并使用
Count ()提供摘要。使用示例数据集创建一个 SQL fiddle,我们可以为您提供更多建议。 -
您需要向我们提供 3 个表中的每一个的示例数据(例如最多 10 行),然后您希望从这些表中得到什么结果。然后我们将能够向您展示解决方案。请记住,SQL 与集合一起工作。在其他语言中,当您使用集合时,您需要一个循环。您不需要 SQL 中的循环来处理集合。
-
另外,您的示例没有意义——例如
ON ST.WAY=SC.WAY——根据您发布的链接,WAY 不是这些表中的列。 -
我正在努力,给我一些时间
-
你是对的霍根。我已经改了。
标签: sql for-loop while-loop case