Несколько итогов из sql - PullRequest
0 голосов
/ 27 марта 2009

У меня есть код ниже

 $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 ]

1 голос
/ 27 марта 2009

Так работает SQL - я бы порекомендовал прочесть его.

Ваш основной SELECT возвращает три записи, и для каждой из этих записей он выполняет встроенную SELECT SUM () для total2 - поэтому вы получаете три итога.

Единственный способ остановить это - заставить основной SELECT возвращать одну запись, в которой используются различные методы.

Если вам по-прежнему нужны несколько записей, вам придется игнорировать итоговые суммы и использовать только первую возвращенную.

0 голосов
/ 25 июня 2009

Если вам нужен такой форматированный вывод, вам, вероятно, следует использовать инструмент отчетности.

Если вы хотите взломать, используйте оператор SQL, чтобы получить значение только для первой строки, например:

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

Предупреждение. Это непроверенный код, зависящий от базы данных.

0 голосов
/ 27 марта 2009

ВЫБРАТЬ DISTINCT относится к строке. Поскольку у вас есть разные ряды, вы получите их обратно.

Если все, что вам нужно, это сумма, то почему вы возвращаете другие столбцы? ПРИМЕЧАНИЕ. Возможно, вы захотите вернуться и отредактировать свой вопрос: в 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
0 голосов
/ 27 марта 2009

Бросьте все, кроме итогов, во временную таблицу со всеми представленными столбцами (включая итоги). Вы должны получить загруженную таблицу, но с пустыми значениями в итоговом столбце. Затем выполните последний запрос, вставив сумму в временную таблицу. Наконец, выберите из временной таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...