[英]How to rework this query?
我的數據庫表具有這樣的重要列:
name | violation
file1| major
file1| major
file1| minor
file2| minor
file2| minor
我想得到這樣的結果:
name | minor | major etc.
file1| 1 | 2
file2| 2 | 0
我已經通過以下查詢完成了該操作:
select distinct component as cmp ,project_id,
(select count(severity) from issue_lines where severity = 'MINOR' AND component = cmp) as minor,
(select count(severity) from issue_lines where severity = 'MAJOR' AND component = cmp) as major,
(select count(severity) from issue_lines where severity = 'CRITICAL' AND component = cmp) as critical,
(select count(severity) from issue_lines where severity = 'INFO' AND component = cmp) as info,
(select count(severity) from issue_lines where severity = 'BLOCKER' AND component = cmp ) as blocker
from issue_lines
現在,我想讓它成為現實,因為它將被大量重復使用。 但是厚臉皮的ActiveRecord execute()命令將子查詢中的cmp解析為component,最后我得到了component == component,並且它在所有文件中返回完全違規,而不是單個文件。
我可以直接通過Workbench毫無問題地創建此視圖,但這不是一個選擇。
是否可以重做我的查詢以避免與execute()命令沖突?
使用上面的示例數據,您可以使用以下方法重寫查詢。
SELECT v.name,
COUNT(CASE WHEN v.violation = 'minor' THEN 1 END) as minor,
COUNT(CASE WHEN v.violation = 'major' THEN 1 END) as major
FROM violations as v
GROUP BY v.name;
可以使用CASE WHEN代替子查詢。
SELECT name,
SUM(CASE WHEN v.violation = 'minor' THEN 1 ELSE 0 END) as minor,
SUM(CASE WHEN v.violation = 'major' THEN 1 ELSE 0 END) as major
FROM violations
GROUP BY name;
希望這可以幫助..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.