sql中的多个总计

时间:2009-03-27 18:37:27

标签: mysql grouping

我有以下代码

 $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 个答案:

答案 0 :(得分:1)

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

你的主要SELECT返回三个记录,并且对于每个记录,它运行内联SELECT SUM()for total2 - 这就是你获得三个总数的原因。

阻止它的唯一方法是使主SELECT返回一条记录,其中有各种技术。

如果您仍然需要多个记录,则必须忽略多个记录并仅使用返回的第一个记录。

答案 1 :(得分:0)

将除总计之外的所有内容放入临时表中,其中包含所有列(包括总计)。您应该以加载的表结束,但在总列中使用空值。然后执行最终查询将总数插入临时表。最后,从临时表中选择。

答案 2 :(得分: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

答案 3 :(得分:0)

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

如果你想要hack,请使用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

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