2011-03-02 159 views
2

我有一个表count与属性选择列的基础上最大值

  • COUNT1
  • COUNT2
  • 共3个记录
  • count4
  • count5

我想选择一个具有最大值的列。我怎么做?

计数代表页面命中,我想选择一个具有最大命中并显示它的列。

+0

你为什么要把列命名为'count1','count2'等等?他们是否表达了某种意义? – 2011-03-02 07:50:51

+0

我不认为这些是列的实际名称.... – PedroC88 2011-03-02 07:54:14

+1

kst - 一旦问题得到解答,通常会在答案中打勾以表明它已被接受。这在某种意义上“关闭”了关于答案的 – RichardTheKiwi 2011-03-02 10:52:51

回答

5

您可以使用一个双重嵌套子查询

select 
    (select max(count1) 
    from (
    select count1 union all 
    select count2 union all 
    select count3 union all 
    select count4 union all 
    select count5) X) as MaxCount 
from tbl 
+0

“union all”有什么用途? – 2011-03-02 08:04:46

+0

@Uw概念:{subquery} UNION ALL {subquery} - >创建一个由两个子查询中的所有记录组成的派生表。 – RichardTheKiwi 2011-03-02 08:16:32

+0

非常好,非常感谢您提供的信息! – 2011-03-02 08:20:02

0

有几种方法,涉及PIVOTTemp Table,但我认为最容易理解的是使用Case为此。

SELECT 
    CASE 
     WHEN count1 >= count2 AND count2 >= count3 AND count1 >= count4 AND count1 >= count5 THEN count1 
     WHEN count2 >= count3 AND count2 >= count4 AND count2 >= count5 THEN count2 
     WHEN count3 >= count4 AND count3 >= count5 THEN count3 
     WHEN count4 >= count5 THEN count4 
     ELSE count5 
    END AS highestCount 
+1

注意:如果任何计数为NULL,那么您的链将被破坏。 – RichardTheKiwi 2011-03-02 08:00:46

+0

感谢您指出这一点,在列周围使用COALESCE(countX,0)可能有所帮助 – 2011-03-02 08:03:48

0
select MAX(max_count) FROM 
    (
    select count1 as max_count from count 
    UNION 
    select count2 as max_count from count 
    UNION 
    select count3 as max_count from count 
    UNION 
    select count4 as max_count from count 
    UNION 
    select count4 as max_count from count 
    ) 

我不会建议使用选择,因为它需要很多的时候产生相同的。触发器会更好