1

长期读者,第一次海报。我有一张表,我需要从中收集一些值(在“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 个左右的值重复...

所以这几乎总结了它。任何可以与我分享的建议、提示、链接将不胜感激,因为我已经用尽了我能想到的所有资源。

问候

4

1 回答 1

0

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

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

于 2013-03-23T00:08:20.323 回答