无法找出带有WHERE的SQL SUM()

时间:2017-04-05 01:22:50

标签: php sql database sql-order-by

我正在尝试从SQL数据库中获取结果,我希望它获得一个比率并按该比率对其进行排序。这是值为yes且costumerid相同的行数除以具有costumerid的行总数和ORDER BY那个比率。这就是我现在所拥有的:

 $sqlsortby = "SELECT DISTINCT q2, q14,
               (SUM(WHERE costumerid='$costumerid' AND option1='yes') / 
                SUM(WHERE costumerid='$costumerid')) AS costumerratio
               FROM costumers
               WHERE q14='successful' AND ordernum='$ordernumsession'
               ORDER BY costumerratio";

谢谢:)

-------------------------------------------------------------
|  q2   |  costumerid  |  option1  |  ordernum  |  q14      |
-------------------------------------------------------------
|  Bob  |       1      |  yes      | 001        | successful|
|  Bob  |       1      |  no       | 002        | successful|
-------------------------------------------------------------

2 个答案:

答案 0 :(得分:1)

当前使用SUM()而不是GROUP BY可能不是您想要的,因为它只返回结果集中的一条记录。更典型的情况是,我们将SUM()GROUP BY一起使用。这是我对你想要的猜测:

SELECT t.*
FROM
(
    SELECT q2, q14,
           SUM(CASE WHEN costumerid='$costumerid' AND option1='yes'
                    THEN 1 ELSE 0 END) / 
           SUM(CASE WHEN costumerid='$costumerid' THEN 1 ELSE 0 END) AS costumerratio
    FROM costumers
    WHERE q14='successful' AND
          ordernum='$ordernumsession'
    GROUP BY q2, q14
) t
ORDER BY t.costumerratio

另请注意,您在SUM()内使用的代码汇总已损坏。相反,我已将其替换为CASE表达式。

答案 1 :(得分:1)

在MySQL中,我认为这是做你想做的最简单的方法:

SELECT q2, q14, AVG(option1 = 'yes') as costumerratio
FROM costumers
WHERE q14 = 'successful' AND ordernum = '$ordernumsession' AND
      costumerid = '$costumerid'
GROUP BY q2, q14
ORDER BY costumerratio;

您可以在其他数据库中执行相同的操作,但需要CASE

请注意,这假设您希望行customerid = $costumerid