sql >> Database teknologi >  >> RDS >> Mysql

genbruge resultatet af et udvalgt udtryk i GROUP BY-sætningen?

Ja, det er det . Du kan få det til at fungere i Spark SQL på 2 måder for at bruge ny kolonne i GROUP BY og BEstil efter klausuler

Tilgang 1 ved hjælp af underforespørgsel :

SELECT timeHour, someThing FROM (SELECT from_unixtime((starttime/1000)) AS timeHour, sum(...) AS someThing , starttimeFROM some_table) WHERE starttime>=1000*unix_timestamp('2017-09-16 00:00:00') OG starttid <=1000*unix_timestamp('2017-09-16 04:00:00')GRUPPER EFTER timeTimeRORDER EFTER timeHourLIMIT 10; 

Tilgang 2 ved hjælp af WITH // elegant måde:

-- opret alias MED tabel_aliase AS(SELECT from_unixtime((starttid/1000)) AS timeTime, sum(...) AS someThing, starttidFRA some_table)-- brug det samme alias som tableSELECT timeHour, someThing FROM table_aliaseWHERE starttid>=1000*unix_timestamp('2017-09-16 00:00:00') OG starttid <=1000*unix_timestamp('2017-09-16 04:00:00')GRUPPER EFTER 1 timeTimeREGLER; /kode>

Alternativ med Spark DataFrame(wo SQL) API med Scala :

// Denne kode skal muligvis yderligere importeres for at fungere velval df =.... //indlæs den faktiske tabel som dfimport org.apache.spark.sql.functions._df.withColumn("timeHour", from_unixtime ($"starttid"/1000)) .groupBy($"timeHour") .agg(sum("...").as("noget")) .orderBy($"timeHour") .show()// en anden måde - ifølge eliasah commentdf.groupBy(from_unixtime($"starttid"/1000).as("timeHour")) .agg(sum("...").as("noget")) .orderBy($ "timeHour") .show() 


  1. SQL Injection og LIMIT-sætningen

  2. Hvorfor skal jeg double-escape (brug 4 \) for at finde en omvendt skråstreg (\ ) i ren SQL?

  3. Postgresql :Hvordan vælger jeg top n procent(%) poster fra hver gruppe/kategori

  4. MySQL InnoDB:autoincrement ikke-primær nøgle