【问题标题】:obtain row count in mysql query itself在mysql查询本身中获取行数
【发布时间】:2010-11-22 02:30:30
【问题描述】:

我想在查询本身中获取子查询的返回行数。然后我将在 if 情况下在主查询中使用它。我添加了一个示例,作为一个虚拟字符串,我输入了 QUERY_ROW_COUNT。是否有任何功能可以实现这一点?在此先感谢...问候...

SELECT period_id, 
       lt_id, 
       period_name, 
       min_stay, 
       IF(QUERY_ROW_COUNT=1, 1,0) as tag 
  FROM (SELECT period_id, 
               lt_id, 
               period_name, 
               min_stay, 
               fromDate, 
               toDate, 
               DATEDIFF( '2010-12-27', '2010-12-10' ) as totalDays, 
               nightly_rate,
               case when ('2010-12-10' > fromDate AND '2010-12-27' < toDate) then  
                  DATEDIFF( '2010-12-27', '2010-12-10' )  
                  else 0 
               end as d6,
               case when ('2010-12-10' > fromDate AND '2010-12-27' > toDate) then 
                  DATEDIFF( toDate, '2010-12-10' )+1 
                  else 0 
               end as d7,
               case when ('2010-12-10' < fromDate AND '2010-12-27' < toDate) then 
                  DATEDIFF( '2010-12-27', fromDate ) 
                  else 0 
               end as d8,
               case when ('2010-12-10' < fromDate AND '2010-12-27' > toDate) then 
                  DATEDIFF( toDate, fromDate ) 
                  else 0 
               end as d9    
          FROM `lt_hperiods`
         WHERE ('2010-12-10' BETWEEN Date( fromDate ) AND Date( toDate )  ) 
            OR ( '2010-12-27' BETWEEN Date( fromDate ) AND Date( toDate ))
            OR ('2010-12-10' <= fromDate  AND  '2010-12-27' >= toDate )
           AND (lt_id=1)) MQS

【问题讨论】:

    标签: sql mysql aggregate-functions


    【解决方案1】:

    您可以在主from 子句的内联选择中使用count( 1 ) as some_variable,然后在主查询的选择中将其称为MQS.some_variable

    【讨论】:

      【解决方案2】:

      您是否尝试过 COUNT(*) 或 COUNT(DISTINCT period_id),其中有 QUERY_ROW_COUNT?

      【讨论】:

        【解决方案3】:

        (已解决...这是正在扫描工作解决方案的标签:)感谢所有建议。 我忘了写我已经尝试过所有的求和和计数函数。但是我解决了我的问题......我希望这对某人有帮助。 mysql允许您定义很棒的动态变量..这是参考:

        http://www.xaprb.com/blog/2006/12/02/how-to-number-rows-in-mysql/

        这是代码:

        set @countT = 0;
        set @rowCount = 0;
        
        SELECT MQ.period_id, MQ.lt_id, MQ.period_name, MQ.min_stay, MQ.fromDate, MQ.toDate, MQ.nightly_rate, MQ.periodDays, 
        MQ.totalDays,
        @countT := if(@countT = MQ.periodDays, 0 , @countT + MQ.periodDays) as periodDaysTotal, 
        @rowCount:= @rowCount +1
        FROM (
        SELECT period_id, lt_id, period_name, min_stay, fromDate, toDate, totalDays, nightly_rate, (d1+d2+d3+d4+d5+d6+d7+d8+d9) periodDays 
        
        FROM
        
        (SELECT period_id, lt_id, period_name, min_stay, fromDate, toDate, DATEDIFF( '2010-05-02', '2010-03-10' ) as totalDays,  nightly_rate,
        
         case when ('2010-03-10' > fromDate AND '2010-05-02' < toDate) then DATEDIFF( '2010-05-02', '2010-03-10' ) else 0    end as d6,
         case when ('2010-03-10' > fromDate AND '2010-05-02' > toDate) then DATEDIFF( toDate, '2010-03-10' ) else 0  end as d7,
         case when ('2010-03-10' < fromDate AND '2010-05-02' < toDate) then DATEDIFF( '2010-05-02', fromDate ) else 0 end as d8,
         case when ('2010-03-10' < fromDate AND '2010-05-02' > toDate) then DATEDIFF( toDate, fromDate ) else 0 end as d9
        
         FROM `lt_hperiods`
         WHERE  
         ('2010-03-10' BETWEEN Date( fromDate ) AND Date( toDate )  ) OR
         ( '2010-05-02' BETWEEN Date( fromDate ) AND Date( toDate ))
         OR ('2010-03-10' <= fromDate  AND  '2010-05-02' >= toDate )
        AND (lt_id=1)
        ) MQS ) MQ
        

        【讨论】:

          猜你喜欢
          • 2015-08-04
          • 1970-01-01
          • 1970-01-01
          • 2018-02-09
          • 1970-01-01
          • 1970-01-01
          • 2011-10-26
          • 2013-05-02
          • 1970-01-01
          相关资源
          最近更新 更多