> For the complete documentation index, see [llms.txt](https://goooqo.docs.doyto.win/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://goooqo.docs.doyto.win/query-mapping/query-object/subquery-field.md).

# Subquery Field

## Mapping

For a general subquery,`score > (SELECT avg(score) FROM t_user WHERE deleted = ?)`, is divided into three parts in OQM for mapping:

* score >
* SELECT avg(score) FROM t\_user
* WHERE clause

The first part `score >`can be mapped using the field name `scoreGtXxx`, just like a normal predicate suffix field. The string defined after the predicate suffix is ​​only used to distinguish duplicate field names and will be ignored during mapping.

The second part contains a column and a table name, which are static and unchanging. GoooQo provides two tags to save this information: One is `subquery`, which is used to define the native subquery statement; The other is the combination of the tags `select` and `from`, which saves the column name and table name respectively.&#x20;

The third part is another WHERE clause, which can be mapped through a query object. Therefore, we define the field type as the corresponding query object and map the value to the WHERE clause in the subquery through the query object mapping method.

### Tags Examples

Here are some examples of subquery field definitions (since v0.2.0):

```go
ScoreLtAvg *UserQuery `subquery:"select avg(score) from t_user"`
ScoreLtAny *UserQuery `subquery:"SELECT score FROM t_user"`
ScoreLtAll *UserQuery `subquery:"select score from UserEntity"`
ScoreGtAvg *UserQuery `select:"avg(score)" from:"UserEntity"`
```

### Field Name Resolution

Since 0.2.0, GoooQo also supports resolving SELECT from the field name.&#x20;

#### Field name format

&#x20;`<column><predicate><[aggregate]column>Of<entity>`

#### Examples

```go
ScoreInScoreOfUser    *UserQuery //score IN (SELECT score FROM t_user WHERE ...)
ScoreGtAvgScoreOfUser *UserQuery //score > (SELECT AVG(score) FROM t_user WHERE ...)
```

In these examples, we need to register a mapping relationship to map `User` to `t_user`:

```go
rdb.RegisterEntity("User", "t_user")
```
