如何解决具有多个计数和 SUM() 的 ORDER BY
我正在努力使下面的语法正确。我尝试过各种工会,加入都没有成功。
我需要将 3 个总数求和为“totcount”。数据表很大,希望能找到比第4个子查询更好的获取totcount的方法。
SELECT
location.*,data.status,(SELECT COUNT(data.id) FROM data WHERE data.locid=location.locid AND data.status='NEW') AS newcount,(SELECT COUNT(data.id) FROM data WHERE data.locid=location.locid AND data.status='IN-PROGRESS') AS ipcount,(SELECT COUNT(data.id) FROM data WHERE data.locid=location.locid AND data.status='COMPLATED') AS compcount
FROM TP_locations
LEFT JOIN data ON data.locid=location.locid AND data.status IN('NEW','IN-PROGRESS','COMPLETED')
WHERE data.status IS NOT NULL
GROUP BY location.locid
ORDER BY totcount
解决方法
您的查询(如果我理解其意图)可以简化为:
SELECT
location.*,data.status,--this is meaningless,it will give you a random one of the 3 possible values
COUNT(IF(data.status='NEW',1,null)) AS newcount,COUNT(IF(data.status='IN-PROGRESS',null)) AS ipcount,COUNT(IF(data.status='COMPLATED',null)) AS compcount,COUNT(1) AS totcount
FROM TP_locations
JOIN data ON data.locid=location.locid AND data.status IN('NEW','IN-PROGRESS','COMPLETED')
GROUP BY location.locid
ORDER BY totcount
然后您可以按任何列进行排序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。