我的sql表中有下面的数据,我需要在其中找到我的最高工资,但这里的问题是,如果我的大学名称是c1,那么我需要考虑salary\u college1列,如果college c2,那么我需要从salary\u college2获取工资。
college name salary_college1 salary_college2
c1 n1 5000 6000
c1 n1 5000 6000
c1 n1 5000 6000
c1 n1 5000 6000
c2 n2 9000 6000
c2 n2 12000 4000
预期结果:
college name salary_college1 salary_college2
c1 n1 5000 6000
c2 n2 9000 6000
另外,如果有任何相同的组合重复,那么我只需要采取一个记录,我使用的大学和名称的条件组。有什么办法吗?
select * from(
select college, name, dense_rank()
over(order by salary_college1 desc)r from tablename)
where r=1
但它给了我最高工资的基础上工资大学1我想考虑这些栏目的基础上大学栏目的价值可以有人请指导我该怎么做。
4条答案
按热度按时间9fkzdhlc1#
这是一个甲骨文的演示
下面是mysql的一个演示
m1m5dgzv2#
你要找的是结构的情况。
case-when允许在查询中基本上有if/else子句。例如:
对你来说?
你想看看学校是什么。。。然后在when/else中使用不同的列。
另外,值得一提的是。。。你的table设计看起来很可疑。我是说,如果一张唱片的“大学”值是“c1”。。。为什么会有大学二年级的薪水?如果您将数据库规范化为以下内容,则可以完全消除问题:
34gzjxbg3#
我认为这应该管用:
如果表不保存冗余(或无用的)数据,查询将更容易。你为什么要为一所不相关的大学存钱?这将包含所有必要的数据:
如果您需要其他工资,可以将其另存为新行。那是几年前的事吗?为什么同一个名字和同一所大学有不同的薪水?
byqmnocz4#
这可能是你想要的。虽然它不会提供您所写的预期结果。
这就是我得到的:
大学名称max(
salary_college1
)大学工资2c1 n1 5000 6000
c2 n2 5000 6000