列中的SQL行

时间:2017-12-05 18:57:04

标签: sql sql-server sqlite

我有这个SQL查询

SELECT COUNT(*)*100/(SELECT COUNT(*) FROM tickets WHERE status = 'closed')
FROM tickets 
WHERE closed_at <= due_at 
UNION 
SELECT COUNT(*)*100/(SELECT COUNT(*) FROM tickets WHERE status = 'closed') 
FROM tickets 
WHERE closed_at > due_at;

并返回此

ROW 1 - 35
ROW 2 - 47

但我需要这样的回报:

 1 | 2 |
35  47

我需要列中的返回,而不是行。

感谢。

1 个答案:

答案 0 :(得分:2)

使用条件聚合。我建议:

SELECT (SUM(CASE WHEN closed_at <= due_at THEN 100.0 ELSE 0 END) /
        SUM(CASE WHEN status = 'closed' THEN 1 ELSE 0 END)
       ), 
       (SUM(CASE WHEN closed_at > due_at THEN 100.0 ELSE 0 END) /
        SUM(CASE WHEN status = 'closed' THEN 1 ELSE 0 END)
       )
FROM tickets ;

您在分母中对status = 'closed'进行过滤似乎很奇怪,但在分子中却没有。如果status = closed应该是两者的过滤器,那么您可以将其简化为:

SELECT AVG(CASE WHEN closed_at <= due_at THEN 100.0 ELSE 0 END),
       AVG(CASE WHEN closed_at > due_at THEN 100.0 ELSE 0 END)
FROM tickets
WHERE status = 'closed';