【问题标题】:How do I re-order the output of a MySQL query with a GROUP BY AND ROLLUP?如何使用 GROUP BY AND ROLLUP 重新排序 MySQL 查询的输出?
【发布时间】:2016-12-15 20:08:15
【问题描述】:

有人问过类似的问题,但没有一个能解决我的问题。

我有以下 MySQL 查询,

foreach($db_found->query("
SELECT   netID
        ,activity
        ,YEAR(logdate)                   as Year
        ,DATE_FORMAT(logdate, '%M')      as Month
        ,WEEK(logdate,0)                 as Week
        ,DATE(logdate)                   as Date
        ,DATE_FORMAT(logdate, '%m')      as mnum
        ,COUNT( callsign )               as Logins
        ,COUNT( distinct callsign )      as Stations
        ,SEC_TO_TIME(sum(timeonduty))    as TOD
    FROM  NetLog
   WHERE netID <> 0
     AND logdate >= now()-interval 2 month
     AND activity NOT LIKE '%TEST%'
GROUP BY  Week,  netID WITH ROLLUP
") as $rpt { echo stuff here }

它会产生我需要的输出,但有一个例外,即排序顺序。我想做一个“按周 DESC 订购”,但是当我这样做时,我得到的只是错误。 我已经在“group by”之前和之后尝试了“order by”。我还尝试使用 CUBE 而不是 ROLLUP 进行查询。 我要做的就是列出相同的输出,但按相反的周顺序排列。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    将您的查询放在这样的子查询中并排序。

    Select * from (
        SELECT   netID
            ,activity
            ,YEAR(logdate)                   as Year
            ,DATE_FORMAT(logdate, '%M')      as Month
            ,WEEK(logdate,0)                 as Week
            ,DATE(logdate)                   as Date
            ,DATE_FORMAT(logdate, '%m')      as mnum
            ,COUNT( callsign )               as Logins
            ,COUNT( distinct callsign )      as Stations
            ,SEC_TO_TIME(sum(timeonduty))    as TOD
        FROM  NetLog
       WHERE netID <> 0
         AND logdate >= now()-interval 2 month
         AND activity NOT LIKE '%TEST%'
    GROUP BY  Week,  netID WITH ROLLUP
    ) as t order by week desc;
    

    【讨论】:

    • 我喜欢这听起来多么简单,但我得到了一个错误。致命错误:未捕获的异常“PDOException”和消息“SQLSTATE [42000]:语法错误或访问冲突:1248 每个派生表都必须有自己的别名”在 /var/www/html/NCMreports.php:165 堆栈跟踪:#0 /var/www/html/NCMreports.php(165): PDO->query('\n\t\t\t\t\tSELECT * ...') #1 {main} 抛出 /var/www/ html/NCMreports.php 第 165 行
    • 已更新。你能再试一次吗?
    • 问题可能与我离开查询的内容有关。我在上面的查询中添加了 foreach 和 $rpt 以防万一。
    • 不,不是这样。我添加了它需要的别名。请尝试使用更新后的查询?
    • 您的示例在 phpMyAdmin 中完美运行,但在我的 PHP 中却不行。也许它需要作为一个独立的 SQL 在 foreach 循环之外?
    猜你喜欢
    • 2017-06-25
    • 2020-05-16
    • 2018-03-12
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多