【问题标题】:Counting multiple values in one column在一列中计算多个值
【发布时间】:2013-03-12 23:29:36
【问题描述】:

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

我已经在论坛上搜索了很长时间,这就是我目前想出的……我的问题是我觉得这不是最有效的方法。此外,如果没有条件匹配(例如 else 条件),它不会让我计算。

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 个左右的值重复...

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

问候

【问题讨论】:

    标签: mysql if-statement sum conditional-statements


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      相关资源
      最近更新 更多