我正在尝试从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|
-------------------------------------------------------------
答案 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
。