【问题标题】:order by with group by sub query not working使用 group by 子查询的 order by 不起作用
【发布时间】:2012-06-11 09:39:50
【问题描述】:

我在 mysql 中有一个简单的统计查询。 我使用 php 让它工作,但热衷于将它保存在数据库中,所以我在这里发现了另一个问题。多亏了它,我现在可以在 mysql 中使用它了。

我需要获取每天提交的记录总数。

我有运行总工作,但无论我改变什么,它都不会按天订购。

它将按运行总计列排序,而不是按天排序。

感谢任何输入。

SET @runtot:=0;
SELECT
   q1.`Day` AS 'Days of month',
   q1.`Record count` AS 'Record count',
   (@runtot := @runtot +  q1.`Record count`) AS 'rt'
FROM
   (SELECT
    FROM_UNIXTIME(tr.`tr_last_update`, '%e') AS 'Day',
    COUNT(tr.tr_id_pk) AS 'Record Count'
    FROM records_table AS tr
    GROUP BY FROM_UNIXTIME(tr.`tr_last_update`,'%e')
) AS q1
ORDER BY 'Days of month';

Days of month   Record count    rt
10                  13          13
11                  2           15
7                   255         270
8                   173         443
9                   166         609

【问题讨论】:

  • 是的,我也想过这个问题并尝试过,但恐怕没有乐趣,不过还是感谢您的帮助。

标签: mysql group-by sql-order-by subquery


【解决方案1】:

它被视为一个字符串。尝试转换为 int:

SELECT
q1.`Day` AS 'Days of month',
...
ORDER BY CAST(q1.`Day` AS signed integer)

【讨论】:

  • 刚试了一下,但是它抛出了一个语法错误,它告诉我检查我的语法。检查 typeo,但输入正确。感谢您的帮助。
  • @dbaseman:不管它被处理什么我猜order by总是有效的。
  • @jiraiya 看到我的更新......我猜你必须转换为“有符号整数”(转换为“int”不起作用)。
  • @dbaseman 很棒的东西,当您的更新通过时,我只是在查找带符号整数的 mysql 语法 :) 确实是超快的工作。非常感谢它解决了我的问题。对未来的人们进行一次编辑,它与您最初放置的 order by 子句中的实际 CAST 一起使用。 order by 子句中的别名不起作用。再次感谢。当 SO 允许我时,我会在大约 2 分钟内接受答案。
  • @jiraiya 感谢您的注意-我更新了我的答案。 (虽然我不太清楚为什么使用 ORDER BY 'Days of month' 不起作用,因为当我在 Workbench 中测试时它似乎对我有用。)
【解决方案2】:

除非我弄错了,否则您的整个查询是否与以下内容相同:

SELECT   DAYOFMONTH(FROM_UNIXTIME(tr_last_update)) AS `Days of month`,
         COUNT(tr_id_pk)                           AS `Record Count`,
         @runtot := @runtot + COUNT(tr_id_pk)      AS rt
FROM     records_table, (SELECT @runtot:=0) AS z
GROUP BY `Days of month`
ORDER BY `Days of month`

【讨论】:

  • 嗨,我试过这个查询,但由于某种原因,运行的总数都出错了。我不太清楚为什么。
  • @jiraiya:我的错,分配给@runtot 的表达式应该是+ COUNT(tr_id_pk) 而不仅仅是+ tr_id_pk。我已经更新了我的答案。
  • 完全没问题。我自己应该注意到这一点,但截止日期的压力和周一早上的眼睛对我产生了负面影响。它现在运行,但 @runtot 列正在为每一行重置,因此它不是累积的,而是与每日计数相同。
  • @jiraiya:也许可以摆脱连接的初始化表,像以前一样初始化@runtot,在SELECT之前使用SET语句?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 2016-06-25
  • 2012-12-31
  • 2012-04-19
  • 2019-01-21
相关资源
最近更新 更多