Как суммировать свойства, сгруппированные по другому свойству в массиве? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть массив, например, так:

$array = @()
$Props = [ordered]@{Table="Table1"; Col1=1; Col2=2}
$array += New-Object psobject -Property $Props
$Props = [ordered]@{Table="Table2"; Col1=4; Col2=5}
$array += New-Object psobject -Property $Props
$Props = [ordered]@{Table="Table1"; Col1=3; Col2=7}
$array += New-Object psobject -Property $Props
$Props = [ordered]@{Table="Table2"; Col1=2; Col2=6}
$array += New-Object psobject -Property $Props

Я хочу получить сумму Col1 и Col2, по таблице:

Table    Col1    Col2
-----    -----   -----
Table1       4       9
Table2       6      11

В SQL,это будет:

SELECT Table, Col1 = SUM(Col1), Col2 = SUM(Col2)
FROM <$array>
GROUP BY Table

Но я не могу понять, как это сделать в PoSh.Конечно, это должно быть относительно просто?

1 Ответ

2 голосов
/ 09 июля 2019

Переверните оператор SQL на его голову, и вы в основном знаете, что делать в PowerShell - группируйте по имени таблицы, а затем выбирайте суммы по каждому из них!

# Group the objects by table name
$Tables = $array |Group Table

# Select the table name + sum of each group
$Tables |Select-Object Name,@{Name='Sum1';Expression={($_.Group |Measure-Object Col1 -Sum).Sum}},@{Name='Sum2';Expression={($_.Group |Measure-Object Col2 -Sum).Sum}}

Последние два аргумента Select-Object являются вычисляемыми выражениями:

@{
  # Select a new property named "Sum1"
  Name = 'Sum1'
  Expression = {
    # Calculate the value from the sum of the Col1 properties in this table
    ($_.Group |Measure-Object Col1 -Sum).Sum
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...