当前位置: 首页 > 知识库问答 >
问题:

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

沈乐邦
2023-03-14

我试图在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个答案

章乐逸
2023-03-14

我不了解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追加到该查询。

 类似资料:
  • 问题内容: 如何返回在MySQL中实际上是“连续的” GROUP BY的内容。换句话说,GROUP BY是否尊重记录集的顺序? 例如,从下表中,col1是唯一的有序索引: 返回: 但我需要返回以下内容: 问题答案: 使用: 这里的关键是创建一个允许分组的人为值。 以前,更正了Guffa的答案:

  • 问题内容: 我如何返回在MySQL中实际上是“连续的” GROUP BY。换句话说,GROUP BY是否尊重记录集的顺序? 例如,从下表中,col1是唯一的有序索引: 返回: 但我需要返回以下内容: 问题答案: 采用: 这里的关键是创建一个允许分组的人为值。 以前,更正了Guffa的答案:

  • 本文向大家介绍PHP实现根据数组的值进行分组的方法,包括了PHP实现根据数组的值进行分组的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现根据数组的值进行分组的方法。分享给大家供大家参考,具体如下: PHP根据数组的值分组,php array中没有自带这个函数但是很常用,今天写了出来记录一下。 代码: 运行结果如下: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP

  • 问题内容: 我想以1小时为间隔选择记录,并以小时为间隔选择最高和最低值。我可以在一个小时(例如1:00 am,2:00 am,3:00 am)上执行此操作,但是我想按指定的分钟数(例如1:30am,2:30am,凌晨3:30,或凌晨1:50,凌晨2:50,凌晨3:50)。我不想按半小时分组(例如1:00、1:30、2:00、2:30),这是我每1小时间隔一次的SQL: 我试过了:hour(date

  • 本文向大家介绍如何在JavaScript中对JSON数据进行分组?,包括了如何在JavaScript中对JSON数据进行分组?的使用技巧和注意事项,需要的朋友参考一下 要对JSON数据进行分组,您需要提取所有键并使用。以下是代码- 示例 要运行上述程序,您需要使用以下命令- 输出结果 在这里,我的文件名为demo122.js。这将产生以下输出-

  • 我有一个基因组位置的基因数据集,我希望根据相关的重复信息对该数据集中的行/基因组位置进行分组。我的意思是: 如果我有点a、B、C等的数据集: 我想通过为这些行设置匹配的组编号列来对彼此具有连接(无论是否直接)的那些进行分组,例如,此数据集分组为: 我的实际数据集的一个样本是染色体位置(CP),其中第一个数字是染色体,第二个数字(后面是A:)是该染色体上的基因组位置,因此看起来像这样(实际数据约为3