Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何选择总行数作为列_Mysql_Sql - Fatal编程技术网

Mysql 如何选择总行数作为列

Mysql 如何选择总行数作为列,mysql,sql,Mysql,Sql,我的第一个问题 SELECT id, year_, month_ FROM (SELECT tp.id, YEAR(FROM_UNIXTIME(tp.visited_date)) as year_, MONTH(FROM_UNIXTIME(tp.visited_date)) as month_, @rn := IF(@prev = CONCAT(YEAR(FROM_UNIXTIME(tp.v

我的第一个问题

SELECT
    id,
    year_,
    month_
FROM
    (SELECT
         tp.id,
         YEAR(FROM_UNIXTIME(tp.visited_date)) as year_, 
         MONTH(FROM_UNIXTIME(tp.visited_date)) as month_,
         @rn := IF(@prev = CONCAT(YEAR(FROM_UNIXTIME(tp.visited_date)),MONTH(FROM_UNIXTIME(tp.visited_date))), @rn + 1, 1) AS rn,
         @prev := CONCAT(YEAR(FROM_UNIXTIME(tp.visited_date)),MONTH(FROM_UNIXTIME(tp.visited_date)))
     FROM 
         tr_place tp
     JOIN 
         (SELECT @prev := NULL, @rn := 0) AS vars
     ORDER BY 
         YEAR(FROM_UNIXTIME(tp.visited_date)) DESC, 
         MONTH(FROM_UNIXTIME(tp.visited_date)) DESC) AS T1
WHERE 
    rn < 3;
返回数据

我需要在第一个查询中将子查询的最大rn作为一列


如何实现这一点?

您可能在变量赋值方面遇到了问题。您不应该在选择中引用多个表达式中的变量。因此,编写第一个查询的正确方法是:

SELECT id, year_, month_
FROM (SELECT tp.id,
             YEAR(FROM_UNIXTIME(tp.visited_date)) as year_, 
             MONTH(FROM_UNIXTIME(tp.visited_date)) as month_,
             (@rn := IF (@prev = CONCAT(YEAR(FROM_UNIXTIME(tp.visited_date)), MONTH(FROM_UNIXTIME(tp.visited_date))), @rn,
                         if(@prev := CONCAT(YEAR(FROM_UNIXTIME(tp.visited_date)), MONTH(FROM_UNIXTIME(tp.visited_date))), 1, 1
                        )
             ) as rn
      FROM tr_place tp JOIN
           (SELECT @prev := NULL, @rn := 0) AS vars
      ORDER BY YEAR(FROM_UNIXTIME(tp.visited_date)) DESC, 
               MONTH(FROM_UNIXTIME(tp.visited_date)) DESC
     ) t1
WHERE rn < 3;
注意,变量赋值都在一个表达式中


这可能会解决您的问题。

@Travalourdeveloper。那帮不了什么忙。你应该说错误可能是括号不平衡,是逗号放错了位置。好吧,那一刻很可能已经过去了。
SELECT id, year_, month_
FROM (SELECT tp.id,
             YEAR(FROM_UNIXTIME(tp.visited_date)) as year_, 
             MONTH(FROM_UNIXTIME(tp.visited_date)) as month_,
             (@rn := IF (@prev = CONCAT(YEAR(FROM_UNIXTIME(tp.visited_date)), MONTH(FROM_UNIXTIME(tp.visited_date))), @rn,
                         if(@prev := CONCAT(YEAR(FROM_UNIXTIME(tp.visited_date)), MONTH(FROM_UNIXTIME(tp.visited_date))), 1, 1
                        )
             ) as rn
      FROM tr_place tp JOIN
           (SELECT @prev := NULL, @rn := 0) AS vars
      ORDER BY YEAR(FROM_UNIXTIME(tp.visited_date)) DESC, 
               MONTH(FROM_UNIXTIME(tp.visited_date)) DESC
     ) t1
WHERE rn < 3;