在SQL中按组分组计算列的记录

时间:2014-11-22 00:52:44

标签: sql select phoenix

我正在运行此查询:

SELECT "uname","sip",count(1) as cnt FROM "random_data_date" GROUP BY "uname","sip";

得到这样的东西:

+------------+-----------------+--------------+
|   uname    |    sip          | cnt          |
+------------+-----------------+--------------+
| root       | 172.17.165.60   | 1            |
| root       | 172.17.53.124   | 2            |
| root       | 172.28.184.39   | 3            |
| root       | 192.168.207.7   | 1            |
| root       | 192.168.245.110 | 1            |
| user1      | 172.17.165.60   | 1            |
| user1      | 172.24.85.227   | 10           |
| user1      | 172.25.14.184   | 2            |
| user2      | 172.16.194.151  | 1            |
| user2      | 172.16.248.88   | 1            |
| user2      | 172.16.9.55     | 1            |
| user2      | 172.17.165.60   | 2            |
| user2      | 172.17.234.122  | 1            |
| user2      | 172.17.53.124   | 1            |
+------------+-----------------+--------------+

有没有办法让我可以为每个用户名加上sip s的数量,并加上cnt个,所以输出是这样的:

+------------+-----------------+--------------+
|   uname    |    sipcnt       | cnt          |
+------------+-----------------+--------------+
| root       | 5               | 8            |
| user1      | 3               | 13           |
| user2      | 6               | 7            |
+------------+-----------------+--------------+

我使用Apache Phoenix查询Apache HBase。

我发现this question类似,但我不知道如何将答案应用于我的情况。

3 个答案:

答案 0 :(得分:4)

SELECT "uname",
       Count(distinct "sip") as "sipcnt",
       count(1) as cnt 
FROM "random_data_date" 
GROUP BY "uname";

答案 1 :(得分:1)

会是这样的:

SELECT 
    "uname",
    count(distinct "sip"),
    count("sip") as cnt 
FROM 
    "random_data_date" 
GROUP BY 
    "uname"
;

答案 2 :(得分:0)

运行此查询将为您提供所需的结果:

SELECT DISTINCT(uname),COUNT(sip),SUM(cnt)FROM random_data_date GROUP BY uname