sql >> Databáze >  >> RDS >> Mysql

znovu použít výsledek výběrového výrazu v klauzuli GROUP BY?

Ano, je . Můžete to udělat, aby to fungovalo v Spark SQL dvěma způsoby, jak použít nový sloupec v GROUP BY a ORDER BY klauzule

Přistupte k 1 pomocí dílčího dotazu:

SELECT timeHour, someThing FROM (SELECT  
      from_unixtime((starttime/1000)) AS timeHour
    , sum(...)                          AS someThing
    , starttime
FROM
    some_table) 
WHERE
    starttime >= 1000*unix_timestamp('2017-09-16 00:00:00')
      AND starttime <= 1000*unix_timestamp('2017-09-16 04:00:00')
GROUP BY
    timeHour
ORDER BY
    timeHour
LIMIT 10;

Přistupte k 2 pomocí WITH // elegantním způsobem:

-- create alias 
WITH table_aliase AS(SELECT  
      from_unixtime((starttime/1000)) AS timeHour
    , sum(...)                          AS someThing
    , starttime
FROM
    some_table)

-- use the same alias as table
SELECT timeHour, someThing FROM table_aliase
WHERE
    starttime >= 1000*unix_timestamp('2017-09-16 00:00:00')
      AND starttime <= 1000*unix_timestamp('2017-09-16 04:00:00')
GROUP BY
    timeHour
ORDER BY
    timeHour
LIMIT 10;

Alternativa pomocí rozhraní API Spark DataFrame (dvou SQL) se Scala:

// This code may need additional import to work well

val df = .... //load the actual table as df

import org.apache.spark.sql.functions._

df.withColumn("timeHour", from_unixtime($"starttime"/1000))
  .groupBy($"timeHour")
  .agg(sum("...").as("someThing"))
  .orderBy($"timeHour")
  .show()

//another way - as per eliasah comment
df.groupBy(from_unixtime($"starttime"/1000).as("timeHour"))
  .agg(sum("...").as("someThing"))
  .orderBy($"timeHour")
  .show()


  1. log4j2 Správce JDBC se nemůže připojit k databázi

  2. Chyby oprávnění Mysql s „načíst data“

  3. Jak převedu starší příkaz levého vnějšího spojení v Oracle?

  4. Jak mohu použít datový typ data na serveru SQL?