2011-08-26 38 views
1

的計數我在數據庫中有這些數據:MySQL的 - 如何讓行

+----+------------+---------+ 
| id | col1  | col2 | 
+----+------------+---------+ 
| 1 |   3 |  2 | 
| 2 |   2 |  3 | 
| 3 |   4 |  5 | 
+----+------------+---------+ 

我試圖做一個查詢,這將使我行的總數,在哪都一樣的數字。 我知道他們的價值之一(數字)。

在這種情況下,同樣的數字是和(在列COL1COL2) - 我試圖從數據庫數(兩行)來獲得。我總是有兩個號碼中的一個 - 在這種情況下,號碼是。

可以做這個查詢嗎? 感謝您的幫助。

+2

這麼多邊緣情況要考慮....如果行ID 4具有「col1 = 3」和「col2 = 6」? (仍計數= 2?)如果第5行是「col1 = 6」和「col2 = 3」(這使得計數= 4?) – Fosco

回答

2

您指定的很窄的情況下,我會嘗試這樣的:

select count(*) 
from myTable mt1 
    inner join myTable mt2 on (mt1.col1 = mt2.col2 AND mt2.col1 = mt1.col2) 
and mt1.col1 = 3 --here goes the known value 

爲您發佈的數據裏,才能工作。請讓我們知道以下情形的次數:

+----+------------+---------+ 
| id | col1  | col2 | 
+----+------------+---------+ 
| 1 |   3 |  2 | 
| 2 |   2 |  3 | 
| 3 |   3 |  2 | 
| 4 |   3 |  5 | 
| 5 |   4 |  5 | 
+----+------------+---------+ 
0

你看起來像

SELECT (col1+col2) , COUNT(*) AS num_rows 
FROM table1 
WHERE col1 =3 OR col2 =3 
GROUP BY (col1+col2) 
HAVING num_rows >1 
0

與此查詢:

select count(*) count_rows 
from table1 
where col1=3 or col2=3 
group by concat(IF(col1<col2, col1, col2), ',', IF(col1<col2, col2, col1)) 

你得到的結果2

如果有其他輸入,則將where子句中的查詢替換爲3

concat(IF(col1<col2, col1, col2), ',', IF(col1<col2, col2, col1))的值爲"2,3"爲記錄1-2(和"4,5"爲第三個記錄)。