Mysql 如何写正确的顺序。。。SQL选择中的描述?
你好 检查表的结构 我想选择:Mysql 如何写正确的顺序。。。SQL选择中的描述?,mysql,Mysql,你好 检查表的结构 我想选择: select `idn` order by sum DESC, where sum = (value amount where type = marks and status = up) - (value amount where type = marks and status = down) 为此,我使用SQL: select idn from Balans as outerB WHERE idn ! = '' group by idn order by i
select `idn` order by sum DESC,
where sum = (value amount where type = marks and status = up) - (value amount where type = marks and status = down)
为此,我使用SQL:
select idn from Balans as outerB WHERE idn ! = '' group by idn order by
ifnull((select sum(innerB.amount) from Balans as innerB
where innerB.idn = outerB.idn
and type='up'), 0) -
ifnull((select sum(innerB.amount) from Balans as innerB
where innerB.idn = outerB.idn
and type='down'), 0) DESC
limit 5
但是在SQL中,不按顺序进行正确的排序。。。描述
例如,在我的示例中,结果应该是:
187113012
6299927
可以找到测试SQL
请告诉我如何编写正确的SQL select?如何使用
CASE
SELECT idn,
(SUM(CASE WHEN type = 'marks' AND status = 'up' THEN amount ELSE 0 END)-
SUM(CASE WHEN type = 'marks' AND status = 'down' THEN amount ELSE 0 END))
AS result
FROM Balans b
WHERE idn != ''
GROUP BY idn
ORDER BY result DESC
LIMIT 5;
<强>
> P>如果您愿意考虑对数据库结构的更改,我建议将该值存储为一个正值,如果状态为“UP”,则为正值,如果状态为“下降”,则为负值。 在这些条件下,您的查询会简单得多SELECT idn, SUM(amount) as total
FROM Balans as outerB
WHERE idn !='' AND type = 'marks'
GROUP BY idn
ORDER BY total desc
LIMIT 5
但是,请注意,这不会返回表中没有任何“标记”的记录。如果您需要支持这一点,那么我认为您可以重新使用案例
操作,类似于Prix答案中的查询