【问题标题】:Counting inside select knex js在select knex js中计数
【发布时间】:2020-03-20 13:46:52
【问题描述】:

我有两组表格,如下所示

用户表

|  id| name |
|----|------|
|  1 |  x   |
|  2 |  y   |
|  3 |  z   |

访问表

| event_id | user_id |
|----------|---------|
|     1    |  1      |
|     2    |  2      |
|     3    |  3      |
|     4    |  1      |
|     5    |  1      |
|     1    |  2      |

如何获取每个用户的访问次数以及用户名。 我知道原始 SQL 可以与 knex 一起使用,我可以通过 SQL 查询轻松地做到这一点。我很想知道这是否可以仅使用 knex js。

await knex('visits').count().groupBy('user_id');

上面的查询会给我每个用户的访问次数。如何在同一个查询中获取用户名。

我正在寻找如下所示的输出

| user_id  | name | count |
|----------|------|-------|
|     1    |  x   |   3   |
|     2    |  y   |   2   |
|     3    |  z   |   1   |

【问题讨论】:

    标签: mysql node.js knex.js


    【解决方案1】:

    试试:

    knex('visits')
      .select(['visits.user_id AS user_id', 'user.name'])
      .count('visits.user_id AS count')
      .leftJoin('user', 'user.id', 'visits.user_id')
      .groupBy(['visits.user_id', 'user.name']);
    

    【讨论】:

    • 如果你想避免raw调用,注意你可以做knex.select([...]).count('visits.user_id AS count')
    • 如何计算 where 子句的位置?都可以usersactive is true吗?
    • @TimBogdanov 您必须先添加.where('user.active',true),然后才能执行groupby
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    相关资源
    最近更新 更多