Having

basic

Ví dụ Having cơ bản - lọc kết quả tổng hợp

import { VQueryResultRender } from '@components'

export default () => {
  const vqueryConfig = {
  "datasetId": "having-basic",
  "description": "Ví dụ Having cơ bản - lọc kết quả tổng hợp",
  "vquery": {
    "select": [
      "department",
      {
        "field": "salary",
        "alias": "Total Salary",
        "aggr": {
          "func": "sum"
        }
      }
    ],
    "groupBy": [
      "department"
    ],
    "having": {
      "op": "and",
      "conditions": [
        {
          "field": "salary",
          "aggr": {
            "func": "sum"
          },
          "op": ">",
          "value": 5000
        }
      ]
    }
  },
  "dataset": [
    {
      "id": 1,
      "name": "Alice",
      "age": 25,
      "department": "HR",
      "salary": 5000
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 30,
      "department": "Engineering",
      "salary": 8000
    },
    {
      "id": 3,
      "name": "Charlie",
      "age": 35,
      "department": "Engineering",
      "salary": 9000
    },
    {
      "id": 4,
      "name": "David",
      "age": 40,
      "department": "HR",
      "salary": 6000
    },
    {
      "id": 5,
      "name": "Eve",
      "age": 22,
      "department": "Marketing",
      "salary": 4000
    }
  ],
  "schema": [
    {
      "name": "id",
      "type": "number"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "number"
    },
    {
      "name": "department",
      "type": "string"
    },
    {
      "name": "salary",
      "type": "number"
    }
  ]
}

  return <VQueryResultRender vqueryConfig={vqueryConfig} />
}

between

Ví dụ Having với toán tử BETWEEN

import { VQueryResultRender } from '@components'

export default () => {
  const vqueryConfig = {
  "datasetId": "having-between",
  "description": "Ví dụ Having với toán tử BETWEEN",
  "vquery": {
    "select": [
      "department",
      {
        "field": "salary",
        "alias": "Total Salary",
        "aggr": {
          "func": "sum"
        }
      }
    ],
    "groupBy": [
      "department"
    ],
    "having": {
      "op": "and",
      "conditions": [
        {
          "field": "salary",
          "aggr": {
            "func": "sum"
          },
          "op": "between",
          "value": [
            5000,
            12000
          ]
        }
      ]
    }
  },
  "dataset": [
    {
      "id": 1,
      "name": "Alice",
      "age": 25,
      "department": "HR",
      "salary": 5000
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 30,
      "department": "Engineering",
      "salary": 8000
    },
    {
      "id": 3,
      "name": "Charlie",
      "age": 35,
      "department": "Engineering",
      "salary": 9000
    },
    {
      "id": 4,
      "name": "David",
      "age": 40,
      "department": "HR",
      "salary": 6000
    },
    {
      "id": 5,
      "name": "Eve",
      "age": 22,
      "department": "Marketing",
      "salary": 4000
    }
  ],
  "schema": [
    {
      "name": "id",
      "type": "number"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "number"
    },
    {
      "name": "department",
      "type": "string"
    },
    {
      "name": "salary",
      "type": "number"
    }
  ]
}

  return <VQueryResultRender vqueryConfig={vqueryConfig} />
}

in-array

Ví dụ Having với toán tử IN dạng mảng

import { VQueryResultRender } from '@components'

export default () => {
  const vqueryConfig = {
  "datasetId": "having-in-array",
  "description": "Ví dụ Having với toán tử IN dạng mảng",
  "vquery": {
    "select": [
      "department",
      {
        "field": "salary",
        "alias": "Total Salary",
        "aggr": {
          "func": "sum"
        }
      }
    ],
    "groupBy": [
      "department"
    ],
    "having": {
      "op": "and",
      "conditions": [
        {
          "field": "department",
          "aggr": {
            "func": "min"
          },
          "op": "in",
          "value": [
            "HR",
            "Engineering"
          ]
        }
      ]
    }
  },
  "dataset": [
    {
      "id": 1,
      "name": "Alice",
      "age": 25,
      "department": "HR",
      "salary": 5000
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 30,
      "department": "Engineering",
      "salary": 8000
    },
    {
      "id": 3,
      "name": "Charlie",
      "age": 35,
      "department": "Engineering",
      "salary": 9000
    },
    {
      "id": 4,
      "name": "David",
      "age": 40,
      "department": "HR",
      "salary": 6000
    },
    {
      "id": 5,
      "name": "Eve",
      "age": 22,
      "department": "Marketing",
      "salary": 4000
    }
  ],
  "schema": [
    {
      "name": "id",
      "type": "number"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "number"
    },
    {
      "name": "department",
      "type": "string"
    },
    {
      "name": "salary",
      "type": "number"
    }
  ]
}

  return <VQueryResultRender vqueryConfig={vqueryConfig} />
}

in-single

Ví dụ Having với một giá trị IN

import { VQueryResultRender } from '@components'

export default () => {
  const vqueryConfig = {
  "datasetId": "having-in-single",
  "description": "Ví dụ Having với một giá trị IN",
  "vquery": {
    "select": [
      "department",
      {
        "field": "salary",
        "alias": "Total Salary",
        "aggr": {
          "func": "sum"
        }
      }
    ],
    "groupBy": [
      "department"
    ],
    "having": {
      "op": "and",
      "conditions": [
        {
          "field": "department",
          "aggr": {
            "func": "min"
          },
          "op": "in",
          "value": "HR"
        }
      ]
    }
  },
  "dataset": [
    {
      "id": 1,
      "name": "Alice",
      "age": 25,
      "department": "HR",
      "salary": 5000
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 30,
      "department": "Engineering",
      "salary": 8000
    },
    {
      "id": 3,
      "name": "Charlie",
      "age": 35,
      "department": "Engineering",
      "salary": 9000
    },
    {
      "id": 4,
      "name": "David",
      "age": 40,
      "department": "HR",
      "salary": 6000
    },
    {
      "id": 5,
      "name": "Eve",
      "age": 22,
      "department": "Marketing",
      "salary": 4000
    }
  ],
  "schema": [
    {
      "name": "id",
      "type": "number"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "number"
    },
    {
      "name": "department",
      "type": "string"
    },
    {
      "name": "salary",
      "type": "number"
    }
  ]
}

  return <VQueryResultRender vqueryConfig={vqueryConfig} />
}

is-not-null

Ví dụ Having với toán tử IS NOT NULL

import { VQueryResultRender } from '@components'

export default () => {
  const vqueryConfig = {
  "datasetId": "having-is-not-null",
  "description": "Ví dụ Having với toán tử IS NOT NULL",
  "vquery": {
    "select": [
      "department",
      {
        "field": "salary",
        "alias": "Total Salary",
        "aggr": {
          "func": "sum"
        }
      }
    ],
    "groupBy": [
      "department"
    ],
    "having": {
      "op": "and",
      "conditions": [
        {
          "field": "salary",
          "aggr": {
            "func": "sum"
          },
          "op": "is not null"
        }
      ]
    }
  },
  "dataset": [
    {
      "id": 1,
      "name": "Alice",
      "age": 25,
      "department": "HR",
      "salary": 5000
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 30,
      "department": "Engineering",
      "salary": 8000
    },
    {
      "id": 3,
      "name": "Charlie",
      "age": 35,
      "department": "Engineering",
      "salary": null
    },
    {
      "id": 4,
      "name": "David",
      "age": 40,
      "department": "HR",
      "salary": 6000
    },
    {
      "id": 5,
      "name": "Eve",
      "age": 22,
      "department": "Marketing",
      "salary": null
    }
  ],
  "schema": [
    {
      "name": "id",
      "type": "number"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "number"
    },
    {
      "name": "department",
      "type": "string"
    },
    {
      "name": "salary",
      "type": "number"
    }
  ]
}

  return <VQueryResultRender vqueryConfig={vqueryConfig} />
}

is-null

Ví dụ Having với toán tử IS NULL

import { VQueryResultRender } from '@components'

export default () => {
  const vqueryConfig = {
  "datasetId": "having-is-null",
  "description": "Ví dụ Having với toán tử IS NULL",
  "vquery": {
    "select": [
      "department",
      {
        "field": "salary",
        "alias": "Total Salary",
        "aggr": {
          "func": "sum"
        }
      }
    ],
    "groupBy": [
      "department"
    ],
    "having": {
      "op": "and",
      "conditions": [
        {
          "field": "salary",
          "aggr": {
            "func": "sum"
          },
          "op": "is null"
        }
      ]
    }
  },
  "dataset": [
    {
      "id": 1,
      "name": "Alice",
      "age": 25,
      "department": "HR",
      "salary": 5000
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 30,
      "department": "Engineering",
      "salary": 8000
    },
    {
      "id": 3,
      "name": "Charlie",
      "age": 35,
      "department": "Engineering",
      "salary": null
    },
    {
      "id": 4,
      "name": "David",
      "age": 40,
      "department": "HR",
      "salary": 6000
    },
    {
      "id": 5,
      "name": "Eve",
      "age": 22,
      "department": "Marketing",
      "salary": null
    }
  ],
  "schema": [
    {
      "name": "id",
      "type": "number"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "number"
    },
    {
      "name": "department",
      "type": "string"
    },
    {
      "name": "salary",
      "type": "number"
    }
  ]
}

  return <VQueryResultRender vqueryConfig={vqueryConfig} />
}

max

Ví dụ Having với hàm tổng hợp MAX

import { VQueryResultRender } from '@components'

export default () => {
  const vqueryConfig = {
  "datasetId": "having-max",
  "description": "Ví dụ Having với hàm tổng hợp MAX",
  "vquery": {
    "select": [
      "department",
      {
        "field": "salary",
        "alias": "Max Salary",
        "aggr": {
          "func": "max"
        }
      }
    ],
    "groupBy": [
      "department"
    ],
    "having": {
      "op": "and",
      "conditions": [
        {
          "field": "salary",
          "aggr": {
            "func": "max"
          },
          "op": "=",
          "value": 9000
        }
      ]
    }
  },
  "dataset": [
    {
      "id": 1,
      "name": "Alice",
      "age": 25,
      "department": "HR",
      "salary": 5000
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 30,
      "department": "Engineering",
      "salary": 8000
    },
    {
      "id": 3,
      "name": "Charlie",
      "age": 35,
      "department": "Engineering",
      "salary": 9000
    },
    {
      "id": 4,
      "name": "David",
      "age": 40,
      "department": "HR",
      "salary": 6000
    },
    {
      "id": 5,
      "name": "Eve",
      "age": 22,
      "department": "Marketing",
      "salary": 4000
    }
  ],
  "schema": [
    {
      "name": "id",
      "type": "number"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "number"
    },
    {
      "name": "department",
      "type": "string"
    },
    {
      "name": "salary",
      "type": "number"
    }
  ]
}

  return <VQueryResultRender vqueryConfig={vqueryConfig} />
}

min

Ví dụ Having với hàm tổng hợp MIN

import { VQueryResultRender } from '@components'

export default () => {
  const vqueryConfig = {
  "datasetId": "having-min",
  "description": "Ví dụ Having với hàm tổng hợp MIN",
  "vquery": {
    "select": [
      "department",
      {
        "field": "salary",
        "alias": "Min Salary",
        "aggr": {
          "func": "min"
        }
      }
    ],
    "groupBy": [
      "department"
    ],
    "having": {
      "op": "and",
      "conditions": [
        {
          "field": "salary",
          "aggr": {
            "func": "min"
          },
          "op": "=",
          "value": 5000
        }
      ]
    }
  },
  "dataset": [
    {
      "id": 1,
      "name": "Alice",
      "age": 25,
      "department": "HR",
      "salary": 5000
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 30,
      "department": "Engineering",
      "salary": 8000
    },
    {
      "id": 3,
      "name": "Charlie",
      "age": 35,
      "department": "Engineering",
      "salary": 9000
    },
    {
      "id": 4,
      "name": "David",
      "age": 40,
      "department": "HR",
      "salary": 6000
    },
    {
      "id": 5,
      "name": "Eve",
      "age": 22,
      "department": "Marketing",
      "salary": 4000
    }
  ],
  "schema": [
    {
      "name": "id",
      "type": "number"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "number"
    },
    {
      "name": "department",
      "type": "string"
    },
    {
      "name": "salary",
      "type": "number"
    }
  ]
}

  return <VQueryResultRender vqueryConfig={vqueryConfig} />
}

multi-conditions

Ví dụ Having với nhiều điều kiện (AND/OR)

import { VQueryResultRender } from '@components'

export default () => {
  const vqueryConfig = {
  "datasetId": "having-multi",
  "description": "Ví dụ Having với nhiều điều kiện (AND/OR)",
  "vquery": {
    "select": [
      "department",
      {
        "field": "salary",
        "alias": "Total Salary",
        "aggr": {
          "func": "sum"
        }
      },
      {
        "field": "salary",
        "alias": "Count",
        "aggr": {
          "func": "count"
        }
      }
    ],
    "groupBy": [
      "department"
    ],
    "having": {
      "op": "and",
      "conditions": [
        {
          "field": "salary",
          "aggr": {
            "func": "sum"
          },
          "op": ">",
          "value": 5000
        },
        {
          "field": "salary",
          "aggr": {
            "func": "count"
          },
          "op": ">",
          "value": 1
        }
      ]
    }
  },
  "dataset": [
    {
      "id": 1,
      "name": "Alice",
      "age": 25,
      "department": "HR",
      "salary": 5000
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 30,
      "department": "Engineering",
      "salary": 8000
    },
    {
      "id": 3,
      "name": "Charlie",
      "age": 35,
      "department": "Engineering",
      "salary": 9000
    },
    {
      "id": 4,
      "name": "David",
      "age": 40,
      "department": "HR",
      "salary": 6000
    },
    {
      "id": 5,
      "name": "Eve",
      "age": 22,
      "department": "Marketing",
      "salary": 4000
    }
  ],
  "schema": [
    {
      "name": "id",
      "type": "number"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "number"
    },
    {
      "name": "department",
      "type": "string"
    },
    {
      "name": "salary",
      "type": "number"
    }
  ]
}

  return <VQueryResultRender vqueryConfig={vqueryConfig} />
}

not-between

Ví dụ Having với toán tử NOT BETWEEN

import { VQueryResultRender } from '@components'

export default () => {
  const vqueryConfig = {
  "datasetId": "having-not-between",
  "description": "Ví dụ Having với toán tử NOT BETWEEN",
  "vquery": {
    "select": [
      "department",
      {
        "field": "salary",
        "alias": "Total Salary",
        "aggr": {
          "func": "sum"
        }
      }
    ],
    "groupBy": [
      "department"
    ],
    "having": {
      "op": "and",
      "conditions": [
        {
          "field": "salary",
          "aggr": {
            "func": "sum"
          },
          "op": "not between",
          "value": [
            5000,
            12000
          ]
        }
      ]
    }
  },
  "dataset": [
    {
      "id": 1,
      "name": "Alice",
      "age": 25,
      "department": "HR",
      "salary": 5000
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 30,
      "department": "Engineering",
      "salary": 8000
    },
    {
      "id": 3,
      "name": "Charlie",
      "age": 35,
      "department": "Engineering",
      "salary": 9000
    },
    {
      "id": 4,
      "name": "David",
      "age": 40,
      "department": "HR",
      "salary": 6000
    },
    {
      "id": 5,
      "name": "Eve",
      "age": 22,
      "department": "Marketing",
      "salary": 4000
    }
  ],
  "schema": [
    {
      "name": "id",
      "type": "number"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "number"
    },
    {
      "name": "department",
      "type": "string"
    },
    {
      "name": "salary",
      "type": "number"
    }
  ]
}

  return <VQueryResultRender vqueryConfig={vqueryConfig} />
}

not-in-single

Ví dụ Having với một giá trị NOT IN

import { VQueryResultRender } from '@components'

export default () => {
  const vqueryConfig = {
  "datasetId": "having-not-in-single",
  "description": "Ví dụ Having với một giá trị NOT IN",
  "vquery": {
    "select": [
      "department",
      {
        "field": "salary",
        "alias": "Total Salary",
        "aggr": {
          "func": "sum"
        }
      }
    ],
    "groupBy": [
      "department"
    ],
    "having": {
      "op": "and",
      "conditions": [
        {
          "field": "department",
          "aggr": {
            "func": "min"
          },
          "op": "not in",
          "value": "HR"
        }
      ]
    }
  },
  "dataset": [
    {
      "id": 1,
      "name": "Alice",
      "age": 25,
      "department": "HR",
      "salary": 5000
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 30,
      "department": "Engineering",
      "salary": 8000
    },
    {
      "id": 3,
      "name": "Charlie",
      "age": 35,
      "department": "Engineering",
      "salary": 9000
    },
    {
      "id": 4,
      "name": "David",
      "age": 40,
      "department": "HR",
      "salary": 6000
    },
    {
      "id": 5,
      "name": "Eve",
      "age": 22,
      "department": "Marketing",
      "salary": 4000
    }
  ],
  "schema": [
    {
      "name": "id",
      "type": "number"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "number"
    },
    {
      "name": "department",
      "type": "string"
    },
    {
      "name": "salary",
      "type": "number"
    }
  ]
}

  return <VQueryResultRender vqueryConfig={vqueryConfig} />
}

not-in

Ví dụ Having với toán tử NOT IN

import { VQueryResultRender } from '@components'

export default () => {
  const vqueryConfig = {
  "datasetId": "having-not-in",
  "description": "Ví dụ Having với toán tử NOT IN",
  "vquery": {
    "select": [
      "department",
      {
        "field": "salary",
        "alias": "Total Salary",
        "aggr": {
          "func": "sum"
        }
      }
    ],
    "groupBy": [
      "department"
    ],
    "having": {
      "op": "and",
      "conditions": [
        {
          "field": "department",
          "aggr": {
            "func": "min"
          },
          "op": "not in",
          "value": [
            "Marketing"
          ]
        }
      ]
    }
  },
  "dataset": [
    {
      "id": 1,
      "name": "Alice",
      "age": 25,
      "department": "HR",
      "salary": 5000
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 30,
      "department": "Engineering",
      "salary": 8000
    },
    {
      "id": 3,
      "name": "Charlie",
      "age": 35,
      "department": "Engineering",
      "salary": 9000
    },
    {
      "id": 4,
      "name": "David",
      "age": 40,
      "department": "HR",
      "salary": 6000
    },
    {
      "id": 5,
      "name": "Eve",
      "age": 22,
      "department": "Marketing",
      "salary": 4000
    }
  ],
  "schema": [
    {
      "name": "id",
      "type": "number"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "number"
    },
    {
      "name": "department",
      "type": "string"
    },
    {
      "name": "salary",
      "type": "number"
    }
  ]
}

  return <VQueryResultRender vqueryConfig={vqueryConfig} />
}

or-conditions

Ví dụ Having với điều kiện OR

import { VQueryResultRender } from '@components'

export default () => {
  const vqueryConfig = {
  "datasetId": "having-or",
  "description": "Ví dụ Having với điều kiện OR",
  "vquery": {
    "select": [
      "department",
      {
        "field": "salary",
        "alias": "Total Salary",
        "aggr": {
          "func": "sum"
        }
      }
    ],
    "groupBy": [
      "department"
    ],
    "having": {
      "op": "or",
      "conditions": [
        {
          "field": "salary",
          "aggr": {
            "func": "sum"
          },
          "op": ">",
          "value": 15000
        },
        {
          "field": "salary",
          "aggr": {
            "func": "sum"
          },
          "op": "<",
          "value": 5000
        }
      ]
    }
  },
  "dataset": [
    {
      "id": 1,
      "name": "Alice",
      "age": 25,
      "department": "HR",
      "salary": 5000
    },
    {
      "id": 2,
      "name": "Bob",
      "age": 30,
      "department": "Engineering",
      "salary": 8000
    },
    {
      "id": 3,
      "name": "Charlie",
      "age": 35,
      "department": "Engineering",
      "salary": 9000
    },
    {
      "id": 4,
      "name": "David",
      "age": 40,
      "department": "HR",
      "salary": 6000
    },
    {
      "id": 5,
      "name": "Eve",
      "age": 22,
      "department": "Marketing",
      "salary": 4000
    }
  ],
  "schema": [
    {
      "name": "id",
      "type": "number"
    },
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "number"
    },
    {
      "name": "department",
      "type": "string"
    },
    {
      "name": "salary",
      "type": "number"
    }
  ]
}

  return <VQueryResultRender vqueryConfig={vqueryConfig} />
}