提问者:小点点

如何在MySQL中分组,同时根据值进行计算?


我试图在MySQL5.7中执行一个计算,并按日期和制造商ID分组。我的目标是为每一天和制造商找到这个公式的结果。

一个制造商的select语句如下所示:

 SELECT
  mks.date,
  (
      SUM (
      CASE 
        WHEN p.MANUFACTURER_ID  = 18670  
        THEN (2 / mks.test)
       END 
      ) / SUM ((2 / mks.test))
  )  AS  'Example'
from search mks
INNER JOIN products p on mks.ARTICLE_ID = p.ARTICLE_ID
GROUP BY
   mks.date

它基于表products(保存所有产品信息)和表search(保存每个制造商的所有搜索结果)。

基本上,它所做的是计算结果集中每个制造商的百分比。

现在这对其中一个起作用了,因为我在case语句中筛选了这个特定的制造商。但是,我如何用group by date,maufacturer_id来概括这一点,这样我就可以为结果集中的每个制造商获得一个百分比(总计等于100%)?


共1个答案

匿名用户

我不了解2/col的内容,所以我将给出一个通用的解决方案。

SELECT a.date,
       b.manufacturer_id,
       ROUND(100.0 * SUM(a.value) / tot.grand_total, 1) percent
  FROM a
  JOIN b ON b.b_id = a.b_id
 CROSS JOIN ( SELECT SUM(a.value) grand_total 
                FROM a
                JOIN b ON b.b_id = a.b_id
            ) tot
 GROUP BY a.date, b.manufacturer_id

您使用一个子查询来获得总计,然后将其交叉连接到表中,这样就可以将其用作除数。

如果只需要一个manufacturer_id的结果,可以将where b.manufacturer_id=something追加到该查询。