匹配行的计数,并从配置单元中的每个计数组中选择30

时间:2016-01-07 06:32:03

标签: sql hive hiveql

如何计算以下样本数据的匹配行

ID    Attribute 1  Attribute 2 
        1   A   AA 
        2   B   CC 
        3   C   BB 
        4   A   AA 
        5   C   BB 
        6   D   AA 
        7   B   AA 
        8   C   DD 
        9   A   AB 
        10  A   AA 

输出应该看起来像这样

 ID    Attribute 1  Attribute 2     count(Attribute1+Attribute2)
        1   A   AA  3
        2   B   CC  1
        3   C   BB  2
        4   A   AA  3
        5   C   BB  2
        6   D   AA  1
        7   B   AA  1
        8   C   DD  1
        9   A   AB  1
        10  A   AA  3

然后从每个计数组中选择50%的行。例如:对于mtaching行(A,AA),我只需要选择2次出现。这会给我ID(1和4)

2 个答案:

答案 0 :(得分:0)

您可以使用这样的SQL查询。

SELECT *, 
       (SELECT COUNT(*)
        FROM table AS t2
        WHERE t1.[Attribute1] = t2.[Attibute1] 
          AND t1.[Attribute2] = t2.[Attibute2]) AS 'count(Attribute1+Attribute2)' 
FROM table AS t1

答案 1 :(得分:0)

以下是查询:

select * from (select product_category_id,
count(1) over (partition by product_category_id) cnt,
row_number() over (partition by product_category_id) rn
from products) p where rn <= 0.5 * cnt;

以下是示例结果,product_category_id,cnt,然后是行号。在您的情况下,您需要在partition by子句中拥有两个属性。

59  24  1
59  24  2
59  24  3
59  24  4
59  24  5
59  24  6
59  24  7
59  24  8
59  24  9
59  24  10
59  24  11
59  24  12