如何从MYSQL分组中查询出随机的公司名称

时间:2019-04-25 10:10:28

标签: mysql

我想从分组中获取特定的公司名称。表数据如下所示。我希望能够根据自己的喜好选择要在输出中显示的company_name之一。例如,我想在钻机A的输出中显示Halliburton,Hycalog或Drill甚至有可能吗?

rig     sequence  company_name  total_time  
------  --------  ------------  ------------
Rig A   1         Hycalog                 20
Rig A   2         Halliburton             20
Rig A   3         Drill                   20
Rig B   4         Conoco                  30
Rig B   5         Total                   30

我尝试了子查询,并在所有不返回我想要的结果的情况下进行了尝试。我只想从原始数据中的随机公司中选择要在输出中显示的公司,例如,在这种情况下,我要为钻机A显示company_name钻,为钻机B显示company_name合计...

当然,如果可能的话,我可以自由选择要在输出中显示的公司名称。

SELECT rig, sequence, company_name, SUM(total_time) FROM table A GROUP BY rig;
rig     sequence  company_name  total_time  
------  --------  ------------  ------------
Rig A   3         Drill                   60
Rig B   5         Total                   60

2 个答案:

答案 0 :(得分:1)

如果您使用的是MySQL 8+,那么这里是使用ROW_NUMBER的一个选项:

SELECT rig, sequence, company_name, total_time_sum
FROM
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY rig ORDER BY RAND()) rn,
        SUM(total_time) OVER (PARTITION BY rig) total_time_sum
    FROM tableA
) t
WHERE rn = 1;

enter image description here

Demo

这将从每个钻机组中选择一个随机行并显示它。

答案 1 :(得分:0)

以下查询将返回预期的输出:

SELECT rig, sequence, company_name, SummedTotal AS total_time
FROM
(
    SELECT *, 
           SUM(total_time) OVER (PARTITION BY rig) AS SummedTotal, 
           ROW_NUMBER() OVER (PARTITION BY rig ORDER BY RAND()) Rnum
    FROM TableA
) Q
WHERE Rnum = 1;