2012-10-23 13 views
0

我有下面的格式返回數據的查詢:計數識別號列的MySQL

id | name | number 
1 John 12545 
1 John 50496 
2 Mary 23443 
3 Mark 54 
3 Mark 5600 
3 Mark 50206 

我想找出出現在結果集不同ids數量。例如,上面的結果。我想獲得值3.

有什麼辦法添加一列,所以結果看起來像這樣嗎?

count | id | name | number 
3  1 John 12545 
3  1 John 50496 
3  2 Mary 23443 
3  3 Mark 54 
3  3 Mark 5600 
3  3 Mark 50206 

我的查詢是:用CROSS JOIN

SELECT x.totalCount, 
     a.id, a.name, a.number 
FROM tableName a, (SELECT COUNT(DISTINCT id) totalCount 
        FROM tableName) x 

回答

4
SELECT (SELECT COUNT(DISTINCT id) FROM tableName) totalCount, 
     id,name,number 
FROM tableName 

或者你應該嘗試:

SELECT id,name,number, (SELECT COUNT(DISTINCT name) FROM YourTableName) FROM YourTableName

祝你好運

+0

大概我將不得不把WHERE條件裏面(SELECT COUNT(DISTINCT ...)),如果我想在我的例子查詢計算表中的「T1」的行數? –

+0

如果列被聚合,則不能使用WHERE。它應該是(*例如*)'有計數(DISTINCT id)> 1' –

+0

我有點困惑。你的建議意味着我想要統計整個表的查詢行('.. FROM tableName')?我只想計算表中的行的子集,使用WHERE子句進行選擇。 –

0

SELECT * FROM (
    SELECT id FROM tableA 
    WHERE xyz 
) as t1 
JOIN tableB using (id) 
0

SELECT COUNT(DISTINCT id)會比使用列name更快。

SELECT (SELECT COUNT(DISTINCT id) FROM tableName) as 'count', 
     id,name,number 
FROM tableName 
0
SELECT COUNT(id) AS count , id, name, number 
FROM 
( 
    SELECT id 
    FROM tableA 
    WHERE xyz 
) as t1 
JOIN tableB using (id) 
GROUP BY id, name, number