SQL ex中的SQL练习存在问题
我有一个数据库“绘画”,它由3个表组成:SQL ex中的SQL练习存在问题,sql,Sql,我有一个数据库“绘画”,它由3个表组成: utQ(Q_ID int,Q_NAME varchar(35)) utV(V_ID int,V_NAME varchar(35),V_COLOR char(1)) utB(B_Q_ID int,B_V_ID int,B_VOL tinyint,B_DATETIME DATETIME) utQ表包含正方形的标识符和名称,正方形的初始颜色为黑色。(注意:黑色不是一种颜色,被视为未上漆。只有红色、绿色和蓝色是颜色。) utV表包含喷漆罐的标识符和名称以及它
- utQ(Q_ID int,Q_NAME varchar(35))
- utV(V_ID int,V_NAME varchar(35),V_COLOR char(1))
- utB(B_Q_ID int,B_V_ID int,B_VOL tinyint,B_DATETIME DATETIME)
- 喷漆可以包含三种颜色中的一种:红色(V_COLOR='R')、绿色(V_COLOR='G')或蓝色(V_COLOR='B');
- 任何喷雾最初都可以包含255个油漆单位李>
- 方形颜色根据RGB模型定义,即R=0,G=0,B=0为黑色,而R=255,G=255,B=255为白色李>
- utB表中的任何记录都会将相应喷漆罐中的油漆量减少B_VOL,并相应地将应用于正方形的油漆量增加相同的值李>
- B_VOL必须大于0且小于或等于255李>
- 一个正方形上的单色油漆量不得超过255,一个喷漆罐内的油漆量不得少于零李>
- 绘制事件的时间(B_DATETIME)以1秒的精度指定,即不包含毫秒李>
- 出于历史原因,许多练习将喷雾罐称为“气球”,utV表包含喷雾罐名称(V#U名称列),如“气球#01”等
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
不幸的是,它没有通过所有的测试。你能帮帮我吗,我做错了什么?(我发现这个练习的所有“解决方案”也不能通过所有测试)
提前非常感谢您的帮助问题是,当数据库中缺少至少一种颜色时,我的查询没有考虑到这种情况。例如,如果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