SQL题收集
SQL题收集 reference-site-list
steps 分组统计
group by - having
题目:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 mysql> select * from table_class; +----+--------+---------+-------+ | id | name | subject | score | +----+--------+---------+-------+ | 1 | 赵六 | 语文 | 83 | | 2 | 钱七 | 语文 | 87 | | 3 | 王五 | 英语 | 81 | | 4 | 张三 | 数学 | 96 | | 5 | 王五 | 语文 | 84 | | 6 | 钱七 | 数学 | 89 | | 7 | 张三 | 语文 | 82 | | 8 | 赵六 | 英语 | 98 | | 9 | 李四 | 语文 | 95 | | 10 | 钱七 | 英语 | 87 | | 11 | 李四 | 英语 | 92 | | 12 | 张三 | 英语 | 90 | | 13 | 李四 | 数学 | 94 | | 14 | 赵六 | 数学 | 87 | | 15 | 王五 | 数学 | 82 | +----+--------+---------+-------+ 数据如上:使用SQL查询所有课程都>=90分的人的姓名 并使用两种不同的写法。
答案:
方法1:求补集,先求出不符合要求的人(分数小于90,只要有一门小于90就算),然后将这些人排除,剩下的就是要查的人。核心逻辑:目标集合比较复杂,条件较多,但是它的补集相对简单,就换算成全集减去目标集合的补集。
这种方法适合于在不知道group by - having的情况下去求解
1 2 3 4 5 select a.name from ( select t.name from table_class t group by t.name ) a where a.name not in ( select b.name from table_class b where b.score < 90 group by b.name ) group by a.name
方法2:正向求,直接使用group by - having 查询每组里面最小的分数都大于等于90的组。核心逻辑:该分组里最小的分数都大于等于90,那么其他数都大于等于90。 利用了having是在group by 后面做条件查询,分组里的条件,真的非常方便
1 select t.name from table_class t group by t.name having min (t.score) >= 90
本文标题:SQL题收集
本文作者:Xplorist
创建时间:2021-11-19 20:49:00
本文链接:https://xplorist.tech/2021/11/19/db93fd86a043/
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
$tools-item-width = 2.2rem
$tools-item-font-size = 1.1rem
$tools-item-border-radius = 0.1rem
.side-tools-container {
position relative
.tools-item {
width $tools-item-width
height $tools-item-width
margin-bottom 0.2rem
color var(--default-text-color)
font-size $tools-item-font-size
background var(--background-color)
border-right none
border-radius $tools-item-border-radius
box-shadow 0.1rem 0.1rem 0.2rem var(--shadow-color)
cursor pointer
i {
color var(--default-text-color)
}
&:hover {
color var(--background-color)
background var(--primary-color)
box-shadow 0.2rem 0.2rem 0.4rem var(--shadow-color)
i {
color var(--background-color)
}
}
+keep-tablet() {
width $tools-item-width * 0.9
height $tools-item-width * 0.9
margin-bottom 0.2rem
font-size $tools-item-font-size * 0.9
}
&.rss {
a {
width 100%
height 100%
border-radius $tools-item-border-radius
&:hover {
color var(--background-color)
background var(--primary-color)
box-shadow 0.2rem 0.2rem 0.4rem var(--shadow-color)
}
}
}
}
.side-tools-list {
transform translateX(100%)
opacity 0
transition-t("transform, opacity", "0, 0", "0.2, 0.2", "linear, linear")
.tool-expand-width {
+keep-tablet() {
display none
}
}
&.show {
transform translateX(0)
opacity 1
}
}
.exposed-tools-list {
if (hexo-config('style.scroll.percent.enable') == true) {
.tool-scroll-to-top {
display none
&.show {
display flex
}
&:hover {
.percent {
display none
}
.arrow-up {
display flex
}
}
.arrow-up {
display none
}
.percent {
display flex
font-size 1rem
}
}
}
}
}