MySQL - 如何获取行数

时间:2011-08-26 19:23:01

标签: mysql sql select count

我在数据库中有这些数据:

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

我正在尝试进行查询,这会给我一个行数,其中的数字相同。 我知道其中一个值(数字)。

在这种情况下,相同的数字是 2 3 (列 col1 col2 ) - 我想从数据库号 2 (两行)中获取。我总是有两个数字中的一个 - 在这种情况下数字 3

可以做这个查询吗? 谢谢你的帮助。

3 个答案:

答案 0 :(得分: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 |
+----+------------+---------+

答案 1 :(得分:0)

你看起来像

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

答案 2 :(得分: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

对于记录1-2,concat(IF(col1<col2, col1, col2), ',', IF(col1<col2, col2, col1))的值为"2,3",对于第三条记录,"4,5"的值为{{1}}。