簡體   English   中英

如何使用 SQL 對數據進行分組

[英]How to group data with SQL

如何對 Timestream 數據進行分組?

該表看起來像這樣簡化:

point_delivery_number | measure_name  | time                   | value
------------------------------------------------------------------------
AT3265345345          | "consumption" | 2021-01-02 12:00:00.00 | 0.13
AT3265345345          | "generation"  | 2021-01-02 12:00:00.00 | 0.32

我想查詢point_delivery_number == xx 和time = xx 的位置

結果應該是:

point_delivery_number | consumption | time  | generation
----------------------------------------------------------
AT3265345345          |  0.13       | xxxxx | 0.32

我嘗試的是:

    SELECT point_delivery_number, measure_name, time, measure_value::double 
    FROM "energy_datapoints"."energy_data"
    WHERE point_delivery_number='AT234123234541243'
    GROUP BY point_delivery_number, measure_name, time, measure_value::double;

結果是:

point_delivery_number | measure_name  | time                   | value
------------------------------------------------------------------------
AT3265345345          | "generation" | 2021-01-02 12:15:00.00  | 0.123
AT3265345345          | "generation"  | 2021-01-02 12:00:00.00 | 0.32

我希望consumptiongeneration成為一種財產,而不是一種價值。

您正在處理一個鍵/值表。 每個 point_delivery_number 都有帶有鍵(measure_name)和值(時間和值)的行。

您想獲取兩個鍵的值。 一種方法是同時選擇並加入它們:

select
  point_delivery_number,
  c.value as consumption,
  g.value as generation
from 
  (select * from energy_datapoints.energy_data where measure_name = 'consumption') c
full outer join
  (select * from energy_datapoints.energy_data where measure_name = 'generation') g
    using (point_delivery_number)
order by point_delivery_number;

另一種方式是聚合。 您希望每個 point_delivery_number 一行,因此您GROUP BY point_delivery_number 然后在條件上使用MINMAX以僅獲取有問題的度量名稱。

select
  point_delivery_number,
  min(case when measure_name = 'consumption' then value end) as consumption,
  min(case when measure_name = 'generation' then value end) as generation
from energy_datapoints.energy_data
group by point_delivery_number
order by point_delivery_number;

免責聲明:我不知道 Amazon Timestream。 上述查詢是標准 SQL 查詢,應該在大多數 RDBMS 中工作(完全按照書面形式或稍作更改)。

至於您自己的查詢:您使它看起來像是在聚合,但似乎您只是選擇單行,因為您的GROUP BY子句包括所有列。 GROUP BY ____的意思是“我想匯總我的數據以得到每 ____ 個結果行”。 您希望每個 point_delivery_number 有一個結果行,因此GROUP BY point_delivery_number

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM