2012-09-11 48 views
2

我需要一个SQL查询来合并我在我的表上不同列上的所有数字,并找到它们出现的总和。Number Frequencies

我的表结构是这样的

id | Pick1 | Pick2 | Pick3 | Pick4 | Pick5 | Pick6 | 
---------------------------------------------------- 
1 | 1  | 23 | 56 | 56 | 78 | 89 | 
---------------------------------------------------- 
2 | 9  | 49 | 90 | 56 | 78 | 89 | 
---------------------------------------------------- 
3 | 2  | 65 | 56 | 56 | 78 | 89 | 
---------------------------------------------------- 
4 | 1  | 23 | 23 | 56 | 78 | 89 | 

预期结果

Number | Frequency 
------------------- 
    23 | 5 
------------------- 
    56 | 7 
------------------- 
    89 | 4 
.... 

谁能帮助?

回答

0

您需要在子查询中使用UNION ALL来合并所有记录。试试这个,

SELECT x.a `Number`, 
     COUNT(x.a) `Frequency` 
FROM 
(
    SELECT Pick1 a 
    FROM TableNAME 
    UNION ALL 
    SELECT Pick2 a 
    FROM TableNAME 
    UNION ALL 
    SELECT Pick3 a 
    FROM TableNAME 
    UNION ALL 
    SELECT Pick4 a 
    FROM TableNAME 
    UNION ALL 
    SELECT Pick5 a 
    FROM TableNAME 
    UNION ALL 
    SELECT Pick6 a 
    FROM TableNAME 
) x 
GROUP BY x.a 
0
SELECT pick AS `Number`, 
     COUNT(1) AS Frequency 
FROM(
    SELECT Pick1 AS pick 
    FROM table_name 
    UNION ALL 
    SELECT Pick2 AS pick 
    FROM table_name 
    SELECT Pick3 AS pick 
    FROM table_name 
    SELECT Pick4 AS pick 
    FROM table_name 
    SELECT Pick5 AS pick 
    FROM table_name 
    SELECT Pick6 AS pick 
    FROM table_name 
    ) a 
GROUP BY a.pick; 
0

这会容易得多,如果你能重新整理表格到类似下面的struture:

id | pick | nr 
------------------ 
1 1  1 
1 2  23 
1 3  56 

在这样的表格,你可以很容易分组并统计数字。 在你的项目中可以改变这种表结构吗?

或者,如果不可行,则可以创建一个辅助视图,它将数据排列在此结构中,然后将此结果用于进一步处理。这种观点可以通过使用6个选择语句的联合来构建。如果您需要进一步的帮助,请告诉我。