2012-08-28 97 views
2

我想获取mySQL表中所有列的最常见值。获取所有列的最常见值

[id] [UserID]   [UserID2] 
1  johnnietheblack  marywhite 
2  johnnietheblack  marywhite 
3  dannyrottenegg  dannyrottenegg  
4  marywhite   marywhite 
5  marywhite   johnnietheblack  
6  johnnietheblack  marywhite 

这是我想要的输出:

[id] [UserID]   [Count] 
    1  johnnietheblack  4 
    2  dannyrottenegg  2 
    3  marywhite   6 

我可以使用以下方法来获得共同的价值观一列。但我怎样才能得到所有列的共同价值观?

SELECT COUNT(*) AS `Rows`, UserID 
FROM table-name 
GROUP BY UserID 
ORDER BY `Rows` DESC 
+0

我不太清楚,你能解释一下有什么不同?你期望展示什么? – jcho360

+0

查看输出示例。 – Floppy88

回答

2
SELECT UserID, COUNT(*) FROM 
(SELECT UserID FROM tablename 
UNION ALL 
SELECT UserID2 FROM tablename) t 
GROUP BY UserID 

我不包括id列,因为它似乎并没有与价值观相关。

如果你想看到所有的ID的每个名称,你可以使用GROUP_CONCAT:

SELECT GROUP_CONCAT(id), UserID, COUNT(*) FROM 
(SELECT id, UserID FROM tablename 
UNION ALL 
SELECT id, UserID2 FROM tablename) t 
GROUP BY UserID 
+0

_Error:对不起,每个派生表都必须有自己的别名_ – Floppy88

+1

@WeContest。固定。 –

+0

谢谢,现在它工作。我在_COUNT_之前尝试添加ID列,但它返回一个错误。我应该把它放在哪里? – Floppy88