【问题标题】:selection of column based on max value根据最大值选择列
【发布时间】:2011-03-02 16:08:36
【问题描述】:

我有一张带有属性的表count

  • count1
  • count2
  • count3
  • count4
  • count5

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

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

【问题讨论】:

  • 为什么将列命名为count1count2 等等?它们是否表示某种含义?
  • 我不认为这些是列的实际名称....
  • kst - 一旦问题得到回答,通常会在答案上打勾以将其标记为已接受。从某种意义上说,这“关闭”了问题
  • 感谢答案,但不是获取计数,而是我想获取列名,我怎样才能得到它,即是否可以根据行中的记录获取列名跨度>

标签: sql sql-server-2005


【解决方案1】:

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

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

【讨论】:

  • @Uw 概念:{subquery} UNION ALL {subquery} -> 创建一个由两个子查询的所有记录组成的派生表。
【解决方案2】:

有几种方法,涉及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

【讨论】:

  • 注意:如果任何计数为NULL,您的链将被破坏。
  • 感谢您指出这一点,在列周围使用 COALESCE(countX, 0) 可能会有所帮助
【解决方案3】:
   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
   )

我不建议使用 Select,因为它需要很长时间才能生成相同的内容。触发器会更好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2011-03-31
    • 1970-01-01
    相关资源
    最近更新 更多