长时间读者,第一次海报。我有一个表,我需要从中收集计数一些值(在'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个左右的值......
所以这几乎总结了一下。任何建议,提示,链接,你可以与我分享将非常感激,因为我几乎耗尽了我能想到的所有资源。
此致
答案 0 :(得分:0)
您的方法是更好的方法。运行单独的SQL查询最终会多次扫描表。更好的是只要经过一次表。
您也可以在SQL中执行额外的算术运算。但是,如果您已经在应用程序代码中编写了它,则无需更改它。