I have 2 Tables (The relevant ones for this question). One for Customers, second for loans.
What I am trying to accomplish is to get each customer's information, and in addition to that how many loans he toked.

我的用户表

+--------+-------+-------+-----+
| cst_id | fname | lname | age |
+--------+-------+-------+-----+
|      1 | xx    | yy    |  11 |
|      2 | xx    | yy    |  22 |
|      3 | xx    | yy    |  33 |
|      4 | xx    | yy    |  44 |
|      5 | xx    | yy    |  55 |
+--------+-------+-------+-----+

贷款表

+---------+-----------------+
| cust_id | loan_variant_id |
+---------+-----------------+
|       1 |               1 |
|       1 |               2 |
|       2 |               3 |
|       2 |               1 |
|       3 |               1 |
+---------+-----------------+

We see that customers with ID 1 have 2 registered loans.

最后一张桌子应该是什么样子

您可以忽略新列"name",因为它与问题无关.

+--------+-------+-------+-----+-------+------------+
| cst_id | fname | lname | age | name  | loan_count |
+--------+-------+-------+-----+-------+------------+
|      1 | xx    | yy    |  11 | xx yy |          2 |
|      2 | xx    | yy    |  22 | xx yy |          2 |
|      3 | xx    | yy    |  33 | xx yy |          1 |
|      4 | xx    | yy    |  44 | xx yy |          0 |
|      5 | xx    | yy    |  55 | xx yy |          0 |
+--------+-------+-------+-----+-------+------------+

我的SQL代码

SELECT
    *,
    CONCAT(fname, ' ', lname) AS name,
    COUNT(##some magic code please, at least what i think##) AS loan_count
FROM
    t_cst

现在我知道,通过这个查询,我可以在t_loans表中完成我想要的(计算每个用户 token 的贷款数量).然而,我对如何同时使用这两个查询有点困惑.

SELECT
    COUNT(cust_id) AS loansCountForEachCst
FROM
    t_loans
GROUP BY
    (cust_id)

有什么 idea 吗?

推荐答案

我们可以使用简单的GROUP BYOUTER JOIN来包括所有客户,即使他们没有贷款:

SELECT
    c.cst_id,
    c.fname,
    c.lname,
    c.age,
    CONCAT(c.fname, ' ', c.lname) AS name,
    COUNT(l.loan_variant_id) AS loan_count
FROM
    t_cst c
LEFT OUTER JOIN 
    t_loans l ON c.cst_id = l.cust_id
GROUP BY
    c.cst_id, c.fname, c.lname, c.age

关键是我们必须捕获GROUP BY子句中的所有公共输出.

看到这把小提琴了吗:http://sqlfiddle.com/#!9/bd7ee73/2

Mysql相关问答推荐

查找关联数据库表的超集

MySQL嵌套的内连接使查询变得很慢-解决方案?

最终的自联表是如何记住关联的呢?

如何创建一个列,该列在另一个表中具有值的计数?

在两个日期之间生成每个月的1行数据.

如何确保 SQL 记录的列不引用它自己的主键?

Mysql,显示谁已经和没有 Select 退出巴士服务

检索按键列值分组的最新日期 (MySql)

Over() 函数不覆盖表中的所有行

DECIMAL(m, n) 在 64 位系统中如何表示?

如何在sql中挑出某些名称

当您无法修复表时,如何修复 MySQL不正确的密钥文件错误?

MySQL PHP - Select WHERE id = array()?

授予用户对 MySQL 中有限数量表的访问权限

将 Django DB 从 SQLite 迁移到 MySQL 的最佳方法是什么?

如何用一系列日期填充表格?

MySQL 中的 VARCHAR(255) 和 TINYTEXT 字符串类型有什么区别?

MySQL中的行值增加和减少1

在 MySQL 中删除数据库返回删除数据库错误:66

在 MySQL 中仅 Select 仅包含字母数字字符的行