sql >> データベース >  >> RDS >> Mysql

GROUP BY句のselect式の結果を再利用しますか?

    はい、そうですGROUP BYで新しい列を使用するには、2つの方法でSparkSQLで機能させることができます。 およびORDER BY 条項

    サブクエリを使用したアプローチ1:

    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;
    

    WITHを使用したアプローチ2//エレガントな方法:

    -- 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;
    

    ScalaでSparkDataFrame(wo SQL)APIを使用する代替手段:

    // 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. OracleRACHAソリューションとGaleraClusterforMySQLまたはMariaDBの比較

    2. すべてのUTF8文字を最も標準的な形式に正規化する

    3. PostgreSQLまたはOracleで月の名前で注文する方法

    4. Access2016で空のデータベースを作成する方法