我想从分组中获取特定的公司名称。表数据如下所示。我希望能够根据自己的喜好选择要在输出中显示的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
答案 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;
这将从每个钻机组中选择一个随机行并显示它。
答案 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;