MySQLのクエリでGREATEST()を置き換える標準SQL

私は GREATEST()関数を使用するMySQLクエリを持っており、他のデータベースで実行するために標準のANSI SQLに書き直したいと思います。私はGREATESTがほとんどのSQLデータベースでサポートされていることを知っていますが、おそらくCASEのようなものをサポートするHiveでクエリを実行しようとしていますが、大したものではありません。

GREATEST()を使用せずにこのクエリを書き換えるための洗練された方法を考える人はいますか?

ありがとう!

select 
greatest(play,play_25,play_50,play_75,play_100) as play,
greatest(play_25,play_50,play_75,play_100) as play_25,
greatest(play_50,play_75,play_100) as play_50,
greatest(play_75,play_100) as play_75,
play_100 as play_100 
from video_buckets
4
追加された 著者 Salman A,

2 答え

This won't work in MySQL but validates as Full SQL-92

SELECT (SELECT MAX(c)
        FROM   (VALUES(play),
                      (play_25),
                      (play_50),
                      (play_75),
                      (play_100)) T (c))  AS play,
       (SELECT MAX(c)
        FROM   (VALUES (play_25),
                       (play_50),
                       (play_75),
                       (play_100)) T (c)) AS play_25
FROM   video_buckets  
4
追加された
私はこれがMySQLで動作しないと思います。 UNIONを使用してこれを書き直そうとする価値があるかもしれません。
追加された 著者 Karolis,
@AndriyM - いいえ。MySQLは、派生テーブル内の外部クエリの列に対するこれらの参照をサポートしていません。 AFAIKでは、抽出されたテーブルはクエリ全体で静的である必要があります。
追加された 著者 Martin Smith,
@ Karolis - 前に試したことがありますが、MySQLはまだそれを好きではありません!また、標準SQLとして検証するには、 UNION の各ビットに FROM 句が必要です。
追加された 著者 Martin Smith,
あなたの他のアイデアは、MySQLでそれ動作しますか?
追加された 著者 Andriy M,

あなたはそれを「エレガント」と呼ぶことができるかどうかはわかりませんが、これはうまくいくはずです:

SELECT
  CASE WHEN play_25 > play THEN play_25 ELSE play END AS play,
  play_25,
  play_50,
  play_75,
  play_100
FROM (
  SELECT
    play,
    CASE WHEN play_50 > play_25 THEN play_50 ELSE play_25 END AS play_25,
    play_50,
    play_75,
    play_100
  FROM (
    SELECT
      play,
      play_25,
      CASE WHEN play_75 > play_50 THEN play_75 ELSE play_50 END AS play_50,
      play_75,
      play_100
    FROM (
      SELECT
        play,
        play_25,
        play_50,
        CASE WHEN play_100 > play_75 THEN play_100 ELSE play_75 END AS play_75,
        play_100
      FROM video_buckets
    ) s
  ) s
) s
2
追加された
私はそれが私の目的のために十分エレガントだと思うし、ハイブで働くべきだ。ありがとう!
追加された 著者 Ike Walker,