我有一个数据库"绘画",它由3个表组成:
utQ表包含正方形的标识符和名称,其初始颜色为黑色。 (注意:黑色不是颜色,被认为是未上漆的。只有红色,绿色和蓝色是颜色。) utV表包含喷雾罐的标识符和名称以及它们填充的油漆颜色。 utB表包含有关喷涂方块的信息,包含方形和喷涂罐标识符,所应用的涂料数量以及喷涂事件的时间。
应该注意
这是架构
问题是
黑色方块的最大数量可以用涂料剩余部分涂成白色吗?
我的解决方案如下:
SELECT TOP 1 SUM(t.rest) / 255 tot_rest FROM
(SELECT V_ID,
V_COLOR,
COALESCE(255-SUM(B_VOL), 255) rest
FROM utV LEFT JOIN utB ON utV.V_ID = utB.B_V_ID
GROUP BY V_ID, V_COLOR
HAVING COALESCE(255-SUM(B_VOL), 255) != 0) t
GROUP BY t.v_color
ORDER BY SUM(t.rest) / 255
不幸的是,它没有通过所有测试。你能帮助我,我做错了吗? (所有"解决方案"此练习,我发现,也没有通过所有测试)
非常感谢您提供任何帮助!
答案 0 :(得分:0)
问题是我的查询在数据库中缺少至少一种颜色时没有考虑这种情况。例如,如果utV中没有记录,而红色喷涂罐没有utB,则正确的查询应该返回0,但是我的查询会返回一些数字。
正确的查询是:
SELECT CASE WHEN COUNT(*) = 3 then MIN(t1.tot_rest) ELSE 0 END
FROM
(SELECT SUM(t.rest) / 255 tot_rest FROM
(SELECT V_ID,
V_COLOR,
COALESCE(255-SUM(B_VOL), 255) rest
FROM utV LEFT JOIN utB ON utV.V_ID = utB.B_V_ID
GROUP BY V_ID, V_COLOR) t
GROUP BY t.v_color) t1