MySql:在查询中初始化mySql变量

Dan*_*wan 6 mysql sql

这是我的MySql查询执行的序列:

查询1:SET @channel_rank = 0;

查询2:

  SELECT time_of_day, @channel_rank := IF(
        @current_channel = channel,
        1,
        @channel_rank + 1
      ) AS channel_rank , 
      @current_channel := channel AS channel,Views
    FROM
    (
    SELECT @channel_rank = 0,time_of_day,channel, SUM(Views) AS 'Views'
      FROM access_logs_meaningful_optimized
      WHERE `time_of_day` = 0
      AND playing_date = '2016-10-26' GROUP BY channel
      ORDER BY SUM(views) DESC
      LIMIT 5
     ) xx; 
Run Code Online (Sandbox Code Playgroud)

样本结果:

time_of_day  channel_rank  channel                Views   
-----------  ------------  ---------------------  --------
          0             1  Tolo                   1291    
          0             2  Tolo News              855     
          0             3  Samaa News             805     
          0             4  Ary Digital            695     
          0             5  Dunya News             653     
Run Code Online (Sandbox Code Playgroud)

在这里我必须先执行SET @channel_rank = 0;才能将变量(@channel_rank)赋值为0.我的问题是如何,query 2我可以将变量(@channel_rank)分配给0,最初使其second query独立于first1.

Gio*_*sos 7

您不必在子查询中初始化变量.您可以使用CROSS JOIN以下方法初始化变量:

SELECT time_of_day, 
       @channel_rank := IF(@current_channel = channel, 1, 
                             @channel_rank + 1) AS channel_rank, 
       @current_channel := channel AS channel,Views
FROM
(
   SELECT time_of_day,channel, SUM(Views) AS 'Views'
   FROM access_logs_meaningful_optimized
   WHERE `time_of_day` = 0
   AND playing_date = '2016-10-26' 
   GROUP BY channel
   ORDER BY SUM(views) DESC
   LIMIT 5
) AS xx
CROSS JOIN (SELECT @channel_rank := 0) var
Run Code Online (Sandbox Code Playgroud)