我有以下代码
$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次我需要它一次。我尝试过各种各样的,我能想到的一切请帮助它让我疯狂
答案 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
警告:这是未经测试的,依赖于数据库的代码。