我为我的 PowerBall 游戏设置了以下 sql 查询。我不得不将它分成 2 个查询,因为必须单独查询 PowerBall 号码。
我需要帮助的是如何总结所有列(NoA、NoB、NoC、NoD、NoE 和 NoPB)并让它显示最常见的一组 6 个数字,其中所有列的总数介于185 和 215。
举个例子,假设排名靠前的随机数是:1、10、30、15、6 和 20。它们的总和是 82。我不希望它出现,因为所有列不在 185 到 215 之间。
这是我目前的代码片段:
<code>
$sql = mysql_query("SELECT NoA, COUNT(*) AS Occurences FROM
(SELECT NoA FROM Numbers
UNION ALL
SELECT NoB FROM Numbers
UNION ALL
SELECT NoC FROM Numbers
UNION ALL
SELECT NoD FROM Numbers
UNION ALL
SELECT NoE FROM Numbers) t
GROUP BY NoA
ORDER BY Occurences DESC
LIMIT 5;");
while($row = mysql_fetch_array($sql))
{
echo "<tr>" . $row['NoA'] . " </tr>";
echo "<tr>" . $row['NoB'] . " </tr>";
echo "<tr>" . $row['NoC'] . " </tr>";
echo "<tr>" . $row['NoD'] . " </tr>";
echo "<tr>" . $row['NoE'] . " </tr>";
}
$sql2 = mysql_query("SELECT NoPB, COUNT(*) AS Occurences
FROM Numbers
GROUP BY NoPB
ORDER BY Occurences DESC
LIMIT 1;");
while($row2 = mysql_fetch_array($sql2))
{
echo "<font style='color: #FF0000;'><tr>" . $row2['NoPB'] . "</tr><br /><br /></font>";
}
</code>
预先感谢您的帮助!
杰罗姆
最佳答案
FROM 子句中的子查询对“No*”列求和并将结果限制在 185 到 215 之间,然后主查询对总和进行分组,计算相似的总和,降序排列然后限制为最大的 6。
SELECT snum, count(*) AS cc
FROM (
SELECT NoA + NoB + NoC + NoD + NoE + NoPB AS snum
FROM Numbers
WHERE NoA + NoB + NoC + NoD + NoE + NoPB > 185
AND NoA + NoB + NoC + NoD + NoE + NoPB < 215
) AS subnumquery
GROUP BY snum
ORDER BY cc DESC
LIMIT 5;
给我:
+------+----+
| snum | cc |
+------+----+
| 209 | 3 |
| 206 | 2 |
| 207 | 1 |
| 192 | 1 |
+------+----+
这离您的目标还有多远?
或者这就是您要找的东西?
SELECT CONCAT(NoA, ',', NoB, ',', NoC, ',', NoD, ',', NoE, ',', NoPB) AS allnum
, sumnum, count(*) AS cc
FROM (
SELECT NoA, NoB, NoC, NoD, NoE, NoPB,
NoA + NoB + NoC + NoD + NoE + NoPB AS sumnum
FROM Numbers
WHERE NoA + NoB + NoC + NoD + NoE + NoPB > 185
AND NoA + NoB + NoC + NoD + NoE + NoPB < 215
) AS subnumquery
GROUP BY allnum
ORDER BY cc DESC
LIMIT 5;
给我:
+-----------------+--------+----+
| allnum | sumnum | cc |
+-----------------+--------+----+
| 6,8,3,77,32,83 | 209 | 3 |
| 9,9,50,61,39,38 | 206 | 2 |
| 2,26,7,53,28,76 | 192 | 1 |
| 57,52,2,3,10,83 | 207 | 1 |
+-----------------+--------+----+
这是我的测试数据库设置:
CREATE TABLE `Numbers` (
`NoA` int(11) DEFAULT NULL,
`NoB` int(11) DEFAULT NULL,
`NoC` int(11) DEFAULT NULL,
`NoD` int(11) DEFAULT NULL,
`NoE` int(11) DEFAULT NULL,
`NoPB` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `Numbers` VALUES (28,15,30,73,82,37),(51,74,28,14,28,93),(6,8,3,77,32,83),(81,80,14,5,83,92),(9,9,50,61,39,38),(33,9,15,6,27,92),(51,74,28,14,28,93),(6,8,3,77,32,83),(51,74,28,14,28,93),(57,52,2,3,10,83),(33,9,15,6,27,92),(51,74,28,14,28,93),(28,15,30,73,82,37),(75,16,2,45,20,83),(9,9,50,61,39,38),(51,74,28,14,28,93),(33,9,15,6,27,92),(2,26,7,53,28,76),(77,34,11,56,20,83),(51,74,28,14,28,93),(6,8,3,77,32,83),(33,9,15,6,27,92),(51,74,28,14,28,93);
关于MySQL - 对每个 col 中最常见的数字求和,显示 col 总和在 185 到 215 之间的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24330534/