Mysql ORDER BY在查询中不起作用
我有一个查询来获取group by和order by的状态。我得到的结果是分组的,但不是按顺序的。你能帮忙吗 这是我的问题Mysql ORDER BY在查询中不起作用,mysql,sql-order-by,Mysql,Sql Order By,我有一个查询来获取group by和order by的状态。我得到的结果是分组的,但不是按顺序的。你能帮忙吗 这是我的问题 ( SELECT v.STATUS, COUNT(v.STATUS) AS COUNT FROM mdl_ctx_voucher v WHERE MONTH(FROM_UNIXTIME(v.timecreated)) = MONTH(CURDATE()) AND MONTH(FROM_UNIXTIME(v.timemodified)) = MONTH(CURDATE())
(
SELECT v.STATUS, COUNT(v.STATUS) AS COUNT
FROM mdl_ctx_voucher v
WHERE
MONTH(FROM_UNIXTIME(v.timecreated)) = MONTH(CURDATE()) AND
MONTH(FROM_UNIXTIME(v.timemodified)) = MONTH(CURDATE()) AND
YEAR(FROM_UNIXTIME(v.timecreated)) = YEAR(CURDATE()) AND
YEAR(FROM_UNIXTIME(v.timemodified)) = YEAR(CURDATE())
GROUP BY v.STATUS ORDER BY v.`status` DESC
)
UNION
(
SELECT DISTINCT(STATUS),0 as count
FROM mdl_ctx_voucher
WHERE STATUS NOT IN (
SELECT mainQuery.status
FROM
(
SELECT COUNT(v.STATUS) AS COUNT, v.STATUS
FROM mdl_ctx_voucher v
WHERE
MONTH(FROM_UNIXTIME(v.timecreated)) = MONTH(CURDATE())
AND MONTH(FROM_UNIXTIME(v.timemodified)) = MONTH(CURDATE())
AND YEAR(FROM_UNIXTIME(v.timecreated)) = YEAR(CURDATE())
AND YEAR(FROM_UNIXTIME(v.timemodified)) = YEAR(CURDATE())
GROUP BY v.STATUS ORDER BY v.`status` DESC
)mainQuery) ORDER BY v.`status` DESC
)
我得到了这个结果,没有命令
"10" "0"
"30" "0"
"20" "0"
"50" "0"
"40" "0"
NULL "0"
"90" "0"
"60" "0"
我想按状态对结果进行排序。在末尾添加
orderby
。而不是影响整个结果。在您的代码中,它只影响联合的第二部分
select Status, Count from (
SELECT v.STATUS, COUNT(v.STATUS) AS COUNT
FROM mdl_ctx_voucher v
WHERE
MONTH(FROM_UNIXTIME(v.timecreated)) = MONTH(CURDATE()) AND
MONTH(FROM_UNIXTIME(v.timemodified)) = MONTH(CURDATE()) AND
YEAR(FROM_UNIXTIME(v.timecreated)) = YEAR(CURDATE()) AND
YEAR(FROM_UNIXTIME(v.timemodified)) = YEAR(CURDATE())
GROUP BY v.STATUS
)
UNION
(
SELECT DISTINCT(STATUS),0 as count
FROM mdl_ctx_voucher
WHERE STATUS NOT IN (
SELECT mainQuery.status
FROM
(
SELECT COUNT(v.STATUS) AS COUNT, v.STATUS
FROM mdl_ctx_voucher v
WHERE
MONTH(FROM_UNIXTIME(v.timecreated)) = MONTH(CURDATE())
AND MONTH(FROM_UNIXTIME(v.timemodified)) = MONTH(CURDATE())
AND YEAR(FROM_UNIXTIME(v.timecreated)) = YEAR(CURDATE())
AND YEAR(FROM_UNIXTIME(v.timemodified)) = YEAR(CURDATE())
GROUP BY v.STATUS
)mainQuery)
)ORDER BY status DESC
一开始他可能还需要一个SELECT*FROM
,不是吗?@Jens谢谢。工作很好。但是一个小问题。如何从同一查询中获取id。@柴坦尼亚您可以尝试将组\u concat(id)
添加到select子句中。不需要将联合包装到子查询中,就可以对整个结果集进行排序