我试图在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%)?
我不了解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
追加到该查询。