尝试按列nb_pde
降序排列列表中的项目:
DROP TABLE IF EXISTS temp_2;
CREATE TEMPORARY TABLE temp_2 AS
SELECT
code_pde, nb_pde,row_number() OVER(PARTITION BY code_pde ORDER BY nb_pde DESC) AS rank
FROM
(
SELECT code_pde, SUM(den_05) AS nb_pde
FROM z_lab_int_hive_socle.gddi_303_elodi_32_agreg_mois_unit
WHERE code_pde IS NOT NULL AND pde_moteur IS NOT NULL AND pde_moteur = 'non'
GROUP BY code_pde
) AS temp_1
;
INSERT OVERWRITE TABLE z_lab_int_hive_socle.gddi_303_elodi_33_ranking_pde_non_moteur_unit
SELECT rank AS rang, code_pde AS code_pde_non_moteur, nb_pde AS nombre_pde_non_moteur
FROM temp_2;
子查询temp_1
的结果集是这样的,可以:
code_pde nb_pde
-------- -------
01 8E 3392
01 70 265487
01 7F 310
01 82 8
01 M1 630058
01 M2 110083
01 M3 531438
01 30 1321617
01 37 1141343
但最终结果集是:
rang code_pde nombre_pde
---- -------- ----------
1 01 37 1141343
1 01 8E 3392
1 01 M1 630058
1 01 M3 531438
1 01 7F 310
1 01 M2 110083
1 01 70 265487
1 01 30 1321617
1 01 82 8
所有等级均为1:-(
就像对于每一行,只考虑STRING值code_pde
的前两个字符一样。尝试首先压缩code_pde
值(例如:0137
而不是01 37
(,但结果仍然相同。。。
知道怎么了吗?这是我第一次遇到这种问题,在多次使用row_number() over(partition by...
之后
PARTITION BY code_pde
表示row_number
在接收到新的code_pde
时将重置。数据示例中的所有行都有不同的代码。如果有多个具有相同code_pde
的行,则会根据ORDER BY
为它们分配1、2、3。查看窗口功能如何工作的更多详细信息:https://stackoverflow.com/a/55909947/2700344