找回密码
 立即注册
搜索
查看: 1402|回复: 8

[软件] 请教一句sql select的写法

[复制链接]
头像被屏蔽
     
发表于 2019-3-11 18:08 来自手机 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2019-3-11 18:19 来自手机 | 显示全部楼层
本帖最后由 islxyqwe 于 2019-3-11 18:21 编辑

风怒
回复

使用道具 举报

     
发表于 2019-3-11 18:19 来自手机 | 显示全部楼层
嵌套
回复

使用道具 举报

     
发表于 2019-3-11 18:20 来自手机 | 显示全部楼层
mysql要写子查询。先把三个表串起来按a.id分组取id和max(c.value),再串回去把其他的项取出来就行了。postgres可以直接按id取以value排序的rownumber然后过滤出rownumber为1即可。
回复

使用道具 举报

     
发表于 2019-3-11 18:59 | 显示全部楼层
本帖最后由 alvin051414 于 2019-3-11 20:25 编辑

--a表数据可靠的话
--标准sql
select
  a.id,
  a.name,
  case when sub_a.max_value is null then 0 else sub_a.max_value end as highest,
  case when sub_b.max_value is null then 0 else sub_b.max_value end as highestFullTime
from a
left join
  (select b.aid,max(c.value) as max_value from b left join c on b.level=c.level group by b.aid) sub_a
on a.id=sub_a.aid
left join
  (select b_full.aid,max(c.value) as max_value from (select * from b where type='全日制')  b_full
  left join c on b_full.level=c.level group by b_full.aid) sub_b
on a.id=sub_b.aid

--Oracle SQL之类的可以写的更漂亮
select
  a.id,
  a.name,
  nvl(max(c.value),0) as highest,
  max(decode(b.type,'全日制',c.value,0)) as highestFullTime
from a
left join b on a.id=b.aid
left join c on b.level=c.level
group by a.id,a.name

--ab表缺数据的话就刺激了,要outer join再加一堆case when或者nvl2了
--s1这代码模式不兼容case when的么…
回复

使用道具 举报

     
发表于 2019-3-11 19:03 | 显示全部楼层
本帖最后由 hamano_taiki 于 2019-3-11 19:05 编辑
  1. select
  2. a.id,
  3. a.name,
  4. max(c.value) as hightest,
  5. h.value as hightestFullTime
  6. from a
  7. left join b on a.id=b.id
  8. left join c on b.level=c.level
  9. left join
  10. (select
  11. a.id,
  12. max(c.value) as value
  13. from a
  14. left join b on a.id=b.id
  15. left join c on b.level=c.level
  16. where b.type="全日制"
  17. group by a.id)
  18. group by a.id
复制代码


回复

使用道具 举报

头像被屏蔽
     
发表于 2019-3-11 19:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2019-3-11 19:48 | 显示全部楼层
完了,完全忘了,这才两年不用sql

  -- 来自 能看大图的 Stage1官方 Android客户端
回复

使用道具 举报

     
发表于 2019-3-12 00:22 | 显示全部楼层
mysql这种没窗口函数的渣渣这种时候特别烂

  -- 来自 能搜索的 Stage1官方 Android客户端
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-11-16 21:41 , Processed in 0.050945 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表