在CASE中使用COUNT,如何排序结果列?

时间:2019-02-27 03:46:29

标签: mysql sql mysql-workbench

我有以下代码:

SELECT COUNT(CASE WHEN Title LIKE '%Superintendent%' THEN 1 END) AS 'Bob',
       COUNT(CASE WHEN Title LIKE '%Machine%' THEN 1 END) AS 'Control',
       COUNT(CASE WHEN Title LIKE '%Estimator%' THEN 1 END) AS 'Estimator'
FROM pants;

当前结果如下:

Bob   Control   Estimator
230   550       1243

相反,我希望查询的结果视图中的列以降序排列:Estimator-> Control-> Bob

3 个答案:

答案 0 :(得分:1)

不建议动态地弄乱结果集中列的顺序。相反,查询应具有一个结果集,其中包含一组高度可预测的(理想情况下是静态的)列。

我建议对列进行重新排序是在数据库返回结果集之后执行的所有 结果。

答案 1 :(得分:1)

SQL排序旨在对行进行排序,而不对列进行排序。为了更改输出中的列顺序,您需要对数据进行排序,然后构建一个动态查询以正确的顺序返回列。但是,如果这样的结果可以满足您的需求,那么只要做第一部分(对数据进行排序)就容易得多。

Name       Total
Estimator  1243
Control    550
Bob        230

此查询可能看起来像这样(我的MySQL语法很生锈,但这应该很接近)

SELECT 'Bob' as Name, COUNT(CASE WHEN Title LIKE '%Superintendent%' THEN 1 END) AS Total From Pants
UNION ALL
SELECT 'Control' as Name, COUNT(CASE WHEN Title LIKE '%Machine%' THEN 1 END) AS Total From Pants
UNION ALL
SELECT 'Estimator' as Name, COUNT(CASE WHEN Title LIKE '%Estimator%' THEN 1 END) AS Total From Pants
ORDER BY Total desc;

答案 2 :(得分:0)

require tree

这将在行中提供所需的排序数据。然后服务层应该进行从行到列的转置。