【问题标题】:How to (MySQL) multiply cell values on a group by?如何(MySQL)将组上的单元格值乘以?
【发布时间】:2020-02-24 20:08:15
【问题描述】:

我需要在这样的查询中使用 MULTIPLY() 而不是 SUM() 操作所有值(简化):

SELECT aav.id, COUNT(al.id_product) AS num_products, MULTIPLY(al.prop) AS mul_prop
FROM a_table a 
JOIN v_table aav ON a.id = aav.id_article AND a.fecha > '2020-01-13 11:28:54'
JOIN l_table al ON al.id_article = aav.id_article
JOIN l_table al2 ON al.id_article= al2.id_article AND al2.id_product = 113288
WHERE aav.id_attrib IN (SELECT a.id FROM attrib a WHERE a.key= 'my_key') 
GROUP BY id_article HAVING num_products > 2

我正在寻找一种轻量级的解决方案,无需创建视图或临时表,我只是在 OpenOffice 中寻找 MULTIPLY() 之类的函数。

我的目标是当存在一些 prop=0 的产品、一些负的 prop 产品或所有正的 prop 产品时,有负、正和零单元格,这是为了视觉目的。任何想法?我看到 MySQL 没有 MULTIPLY() 函数:/

【问题讨论】:

  • 假设您有两条价格不同的记录,例如1000 美元和 2000 美元。 SUM(al.price) 将返回 $1000 + $2000 = $3000。 MULTIPLY(al.price) 应该返回什么? 1000 美元 * 2000 美元 = 2,000,000 美元?太傻了。
  • 这能回答你的问题吗? SQL Server Query - groupwise multiplication
  • 这能回答你的问题吗? Multiplication aggregate operator in SQL
  • 假设...我已经简化了查询,我不想乘以价格,我想乘以 -1 和 +5 之间的值的属性,并且我需要检查是否存在负数(不为零)、任何零或所有正数属性,我将编辑代码...

标签: mysql sum product


【解决方案1】:

我需要检查是否存在任何负(且不为零)、任何零或所有正属性

SELECT aav.id, 
       COUNT(al.id_product) AS num_products, 
       SUM(al.prop < 0) as count_negative, 
       SUM(al.prop = 0) as count_zeros,
       SUM(al.prop > 0) as count_positive
       -- the rest are NULL
FROM a_table a 
JOIN v_table aav ON a.id = aav.id_article AND a.fecha > '2020-01-13 11:28:54'
JOIN l_table al ON al.id_article = aav.id_article
JOIN l_table al2 ON al.id_article= al2.id_article AND al2.id_product = 113288
WHERE aav.id_attrib IN (SELECT a.id 
                        FROM attrib a 
                        WHERE a.key= 'my_key') 
GROUP BY id_article 
HAVING num_products > 2

【讨论】:

  • 没关系,可以解决我的问题,谢谢!但我记住 MySQL 应该有一个 MULTIPLY() 和 OpenOffice 为“Excel”文件提供的其他功能:P
  • @Windgate DBMS 服务器(如 MySQL)不是表处理器(如 Excel)。它们的内置函数列表总是不同的,因为一组工具中实现的某些功能可能很容易对另一组毫无意义。像 MULTIPLY() 函数...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 2011-08-07
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多