我的数据库表包含如下重要列:
nuget pack
我想得到这样的结果:
name | violation
file1| major
file1| major
file1| minor
file2| minor
file2| minor
我已经通过此查询实现了这一目标:
name | minor | major etc.
file1| 1 | 2
file2| 2 | 0
现在我想把它变成视图,因为它会被重复使用。 但是厚脸皮的ActiveRecord execute()命令将cmp从子查询解析为组件,最后我得到component ==组件,它返回所有文件的完全违规,而不是单个文件。
我可以通过Workbench直接创建此视图,但这不是一个选项。
是否可以重写我的查询以避免与execute()命令发生冲突?
答案 0 :(得分:1)
使用上面的示例数据,您可以使用以下方法重写查询。
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;
答案 1 :(得分:0)
您可以使用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;
希望这会有所帮助..