# 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")
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://goooqo.docs.doyto.win/query-mapping/query-object/subquery-field.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
