sql - 选择多个最小值

标签 sql sqlite

我想显示借得最少的贷款。在这种情况下,两笔贷款捆绑在一起的借款人数量最少。

Loan:
no | type    
------------
L1 | house  
L2 | student
L3 | car    

Borrower ('num' is foreign key to 'no'):
name | num
----------
A    | L1
A    | L1
A    | L2
A    | L3

SELECT loan.type
FROM loan, borrower
WHERE loan.no = b.num
  AND loan.type = (SELECT MIN(type) from loan)
  GROUP BY loan.type


这应该产生studentcar,但现在只给我一个。我应该如何修改查询以解决此问题?

最佳答案

这是使用CTE的方法:

WITH lb as (
      SELECT l.type, COUNT(b.num) as cnt
      FROM loan l LEFT JOIN
           borrower b
           ON l.no = b.num
      GROUP BY l.type
     )
SELECT lb.type
FROM lb
WHERE lb.cnt = (SELECT MIN(lb.cnt) FROM lb);


笔记:


如果您希望借款人的贷款类型最少,那么您应该比较计数而不是类型。
LEFT JOIN考虑没有借款人的贷款类型。
您需要学习正确的显式JOIN语法。简单规则:切勿在FROM子句中使用逗号;始终使用显式JOIN语法。

关于sql - 选择多个最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33336880/

相关文章:

sql - 在事务中删除然后创建外键约束是否安全?

SQL 两个子查询的 MAX 值

php - 如何在 PDO 中绑定(bind)当前列值?

android - 如何查询 SQLite 中的行并找到最低值?

android - Rxjava : Insert only works with single but not with completable

php - 如何在pdo准备语句中用空格写列名

sql - Oracle:处理名为 COMMENT 的字段

php - 为什么 sqlite 不创建我的数据库,即使它已经在 phpinfo() 中检查过,因为它已启用

Android SQLite 列和索引最佳实践

android - 自己的 SQLite 数据库和 onUpgrade