Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL ex中的SQL练习存在问题_Sql - Fatal编程技术网

SQL ex中的SQL练习存在问题

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表包含喷漆罐的标识符和名称以及它

我有一个数据库“绘画”,它由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表包含喷漆罐的标识符和名称以及它们所填充的油漆颜色。 utB表格保存有关正在喷漆的正方形的信息,并包含正方形和喷漆罐标识符、正在喷漆的数量以及喷漆事件的时间

应当指出的是

  • 喷漆可以包含三种颜色中的一种:红色(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
不幸的是,它没有通过所有的测试。你能帮帮我吗,我做错了什么?(我发现这个练习的所有“解决方案”也不能通过所有测试)


提前非常感谢您的帮助 正确的查询是:

    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