使用SQL,我想创建一种直方图。数据本身已经以某种方式组织,这使得直方图的创建变得简单直接。简化的查询基本上看起来像:
SELECT rank, COUNT(*) AS count FROM ranks GROUP BY rank ORDER BY rank;
这给了我一张如下表格:
+------+-------+
| rank | count |
+------+-------+
| 0 | 20 |
| 1 | 15 |
| 2 | 9 |
| 6 | 3 |
| 9 | 2 |
+------+-------+
问题:为了进一步处理数据,我需要明确给出零容器。在这种情况下(知道我的等级从0到9),我需要一个有十行的表(例如,等级3,4,5,7和8将在表中明确说明计数0)。
我考虑创建一个临时表,其中排名为值,并将我的查询加入到该表中,但这似乎并不特别优雅。有更好的方法吗? (避免复杂的程序)。
答案 0 :(得分:3)
以下是我将如何操作,只需确保将对anyTable的引用更改为包含比您希望生成的行数更多的行的任何表。
它仍然使用连接,但是不需要临时表。
此致
詹姆斯
CREATE TABLE ranks
SELECT 0 rank, 20 count
UNION ALL
SELECT 1 rank, 15 count
UNION ALL
SELECT 2 rank, 9 count
UNION ALL
SELECT 6 rank, 3 count
UNION ALL
SELECT 9 rank, 2 count;
SET @VCounter := -1;
SELECT A.rank, B.count FROM
(SELECT @VCounter := @VCounter + 1 rank FROM anyTable WHERE @VCounter < 10) A
LEFT JOIN
ranks B
ON A.rank = B.rank
ORDER BY A.rank;
如果您在实施方面遇到任何问题,请与我们联系,
此致
詹姆斯