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答案中的查询