mysql - 关于连接表的 SQL
问题描述
有 2 个表 - table1 和 table2 我想知道相应范围内的等级的计数
表格1
╔════╦═════╗
║ id ║ val ║
╠════╬═════╣
║ 1 ║ 80 ║
║ 2 ║ 75 ║
║ 3 ║ 72 ║
║ 4 ║ 85 ║
║ 5 ║ 70 ║
║ 6 ║ 80 ║
║ 7 ║ 76 ║
╚════╩═════╝
表2
╔═══════╦══════════╗
║ grade ║ boundary ║
╠═══════╬══════════╣
║ A ║ 85 ║
║ B ║ 80 ║
║ C ║ 75 ║
║ D ║ 70 ║
║ E ║ 65 ║
║ F ║ 0 ║
╚═══════╩══════════╝
我怎样才能得到这样的结果:
╔═══════╦════════╗
║ grade ║ total ║
╠═══════╬════════╣
║ A ║ 1 ║
║ B ║ 2 ║
║ C ║ 2 ║
║ D ║ 2 ║
║ E ║ 0 ║
║ F ║ 0 ║
╚═══════╩════════╝
我以前用 PHP 来做,但我只想用 SQL 来做,我不熟悉复杂的 join 语句。
解决方案
select table2.grade, ifnull(total, 0) as total from table2 left join (
select grade, count(*) as total from (
select table2.grade from table1 join table2
on table2.boundary = (select max(boundary) from table2 where boundary <= table1.val)
) sq
group by grade
) sq on table2.grade = sq.grade
order by grade;
推荐阅读
- express - 删除会话存储中的所有数据
- css - add circle with specific style to canvas
- gnuplot - 在 gnuplot 中堆叠图形
- sql - 我如何在 sql 的一个查询中带来以下报告?有没有办法在一个查询中同时包含两个数据日期?
- javascript - 使用其值查找某个复选框
- java - Pojo 类名序列化
- .net - 如何以编程方式将标签控件添加到 devexpress xtrareport 详细信息带
- android - 声纳 Android 错误的 Gradle 插件“属性名称具有无效字符 '$'”
- html - Django网页在应该注销时显示登录
- c# - 检查文本是否是 C# 中的 C# 代码