SQL查询根据其他字段计算多少个值

时间:2017-05-05 08:20:51

标签: sql database

我在我的cassandra数据库中有这些数据:

+----+----------+-----+-----------+---------+----------+
| ID | NAME     |        hour_date          |  value   |
+----+----------+-----+-----------+---------+----------+
|  1 | Ramesh   | 2017-04-16 05:00:00+0000  |  2000.00 |
|  2 | Ramesh   | 2017-04-16 08:00:00+0000  |  1500.00 |
|  3 | Ramesh   | 2017-04-16 11:00:00+0000  |  2000.00 |
|  4 | Komal    | 2017-04-22 05:00:00+0000  |  6500.00 |
|  5 | Komal    | 2017-04-16 09:00:00+0000  |  8500.00 |
|  6 | Komal    | 2017-04-22 17:00:00+0000  |  4500.00 |
|  7 | Komal    | 2017-04-22 05:00:00+0000  | 10000.00 |
+----+----------+-----+-----------+---------+----------+

通过使用SQL查询,我可以计算每个名称在特定日期的值。以下是输出的示例:

输出:

Ramesh: 
2017-04-16 : 3 values

Komal: 
2017-04-16 : 1 value
2017-04-22 : 3 values

我试过这样做:

SELECT hour_date,name,count(value)
FROM table WHERE
                (
                SELECT hour_date from table 
                WHERE hour_date = '2017-04-16 05:00:00+0000'
                )

但这不起作用。 如何查询表以给出每个名称和每小时_date我有多少值? 我无法解决这个问题。

我使用pyspark使用cassandra连接器进行sql查询。 任何建议都将非常感激。

4 个答案:

答案 0 :(得分:2)


您可以使用以下查询

SELECT trunc(hour_date),name,count(value)
FROM table group by trunc(hour_date), name;

Trunc函数绕过时间戳,您可以获取与名称相关的特定日期的数据计数。您希望您也可以按日期和名称订购

order by trunc(hour_date), name

答案 1 :(得分:1)

您错过了分组功能计数的分组。 试试这个: -

SELECT name,hour_date,count(value) as values
FROM table
group by name, hour_date
order by name, hour_date

答案 2 :(得分:1)

我认为你可以使用(在MYSQL中):

SELECT name,DATE(hour_date) AS date_only, count(value) as values
FROM table
group by name, DATE(hour_date)
order by name, DATE(hour_date)

答案 3 :(得分:1)

您需要按照您想要指望的值进行分组,在您的情况下是用户和日期时间的日期部分

select  name, toDate(hour_date), count(distinct id)
from    table
group by name, toDate(hour_date)
order by name, toDate(hour_date)

toDate()功能仅保留日期部分,不包括小时,分钟和秒。

另请注意,count参数为distinct id,因为您的版本将计算两行,其值与一行相同。