MySQL"填满"直方图中缺少值

时间:2014-04-13 16:09:36

标签: mysql sql histogram

使用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)。

我考虑创建一个临时表,其中排名为值,并将我的查询加入到该表中,但这似乎并不特别优雅。有更好的方法吗? (避免复杂的程序)。

1 个答案:

答案 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;

如果您在实施方面遇到任何问题,请与我们联系,

此致

詹姆斯