计算一列中的多个值

时间:2013-03-22 23:57:27

标签: mysql if-statement sum conditional-statements

长时间读者,第一次海报。我有一个表,我需要从中收集计数一些值(在'product_group'列中找到)重复的时间量,并且还必须考虑来自不同列('product_type')的值。

我在论坛上搜索了很长时间,这就是我现在想出来的......我的问题是我觉得这不是最有效的方式。此外,如果没有条件匹配(例如,否则条件),它不会让我计算。

SELECT
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product1%', 1, 0)) AS Value1,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product2%', 1, 0)) AS Value2,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product3%', 1, 0)) AS Value3,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product4%', 1, 0)) AS Value4,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product5%', 1, 0)) AS Value5,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product6%', 1, 0)) AS Value6,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product7%', 1, 0)) AS Value7,
   SUM(IF(record_type NOT LIKE '%TypeA%' AND product_group LIKE '%Product8%', 1, 0)) AS Value8,
   SUM(product_group NOT LIKE '%Product9%') AS Value9,  
   SUM(IF(record_type LIKE '%TypeA%', 1, 0)) AS Value10
FROM
   [tables]
WHERE
   [conditions]

我的目标是找出加权用户的工作效率。因此,每次用户处理特定产品时,我都要计算。根据产品的类型,我将修改值(从原始的0.83到1.25)以考虑复杂性。一旦所有不同的产品重量都被“碾碎”,我将它们全部加起来然后除以工作小时数。

数学是在我的PHP代码中的SQL查询之外完成的。我想知道使用WHERE部分中的条件而不是我以前的方法运行多个顺序SQL查询是否更好。这是在这种情况下的样子......

SELECT 
   COUNT(*)*0.95 as `Value1`
FROM
   [tables]
WHERE
   record_type NOT LIKE '%TypeA%'
   AND  product_group LIKE '%Product1%'
   [other conditions]

然后重复所有其他10个左右的值......

所以这几乎总结了一下。任何建议,提示,链接,你可以与我分享将非常感激,因为我几乎耗尽了我能想到的所有资源。

此致

1 个答案:

答案 0 :(得分:0)

您的方法是更好的方法。运行单独的SQL查询最终会多次扫描表。更好的是只要经过一次表。

您也可以在SQL中执行额外的算术运算。但是,如果您已经在应用程序代码中编写了它,则无需更改它。