0

我有下面的代码

 $sql = "SELECT 
               date1, 
               date2, 
               userid, 
               jobid, 
               result, 
               price, 
               total, 
              (SELECT distinct SUM(total1) FROM Jobs) as total2
        FROM 
               Jobs 
          WHERE 
              total <= total1 
          GROUP BY 
              '$newphrase', '$newphrase1', '$user', '$job', result 
          ORDER BY 
              jobid DESC, userid DESC";
    $result = mysql_query($sql);

它输出总计,但输出低于输出的 3 倍

SN01 0.17 15 2.55 25.05
SN01 0.50 15 7.5  25.05
SN01 1    15 15   25.05

25.05 输出 3 次,我只需要一次。我已经尝试过不同的和我能想到的一切请帮助它让我发疯

4

4 回答 4

1

这就是 SQL 的工作原理——我建议您阅读它。

您的主要 SELECT 正在返回三个记录,并且对于这些记录中的每一个,它都会为 total2 运行内联 SELECT SUM() - 这就是您获得三个总数的原因。

阻止这种情况的唯一方法是使主 SELECT 返回一条记录,该记录有多种技术。

如果您仍然需要多条记录,您将不得不忽略多个总计,只使用返回的第一个。

于 2009-03-27T19:10:16.833 回答
0

将除总计之外的所有内容都放入一个临时表中,其中包含所有列(包括总计)。您最终应该得到一个已加载的表,但总列中有空值。然后进行最终查询,将总数插入临时表。最后,从临时表中选择。

于 2009-03-27T19:15:26.087 回答
0

SELECT DISTINCT 指的是 ROW。由于您有不同的 ROW,因此您将全部取回。

如果您想要的只是总数,那么您为什么要返回其他列?注意:您可能想返回并编辑您的问题:SELECT 中有 8 列,但示例输出中只有 5 列(除非点以某种方式分隔列输出)?

如果它真的要了你的命,你可以重写查询以返回类似的行,如下所示:

SELECT DISTINCT
    date1, // Maps to column 1: SN01, 
    userid, // Maps to column 3: 15, 
    (SELECT distinct SUM(total1) 
     FROM Jobs) as total2 // Maps to Column 5: 25.05
FROM 
    Jobs 
WHERE 
    total <= total1 
GROUP BY 
    '$newphrase', '$newphrase1', '$user', '$job', result 
ORDER BY 
    jobid DESC, 
    userid DESC
于 2009-03-27T19:50:57.717 回答
0

如果您需要这样的格式化输出,您可能应该使用报告工具。

如果您想要破解,请使用 sql case 语句仅获取第一行的值,如下所示:

SELECT 
           date1, 
           date2, 
           userid, 
           jobid, 
           result, 
           price, 
           total, 
           case when rownum = 1 then
              (SELECT distinct SUM(total1) FROM Jobs)
           else
               null
           end as total2
    FROM 
           Jobs 
      WHERE 
          total <= total1 
      GROUP BY 
          '$newphrase', '$newphrase1', '$user', '$job', result 
      ORDER BY 
          jobid DESC, userid DESC

警告:这是未经测试的、依赖于数据库的代码。

于 2009-06-25T15:09:15.530 回答