MySQL сұрауындағы GREATEST () дегенді ауыстыратын стандартты SQL

GREATEST() функциясын пайдаланатын MySQL сұрауым бар және оны басқа дерекқорларда іске қосу үшін стандартты ANSI SQL-де қайта жазғым келеді. Көптеген SQL дерекқорларымен үлкен қолдау бар екенін білемін, бірақ мен, CASE сияқты нәрселерді қолдайтын, бірақ GREATEST емес, 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-мен жұмыс істемейді. БІРІКТІ пайдаланып, оны қайта жазу керек.
қосылды автор 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
қосылды
Менің ойымша, бұл менің мақсатым үшін талғампаз болып табылады және Hive жұмыс істеу керек деп ойлаймын. Рахмет!
қосылды автор Ike Walker, көзі