【问题标题】:MySQL - how to get count of rowsMySQL - 如何获取行数
【发布时间】:2025-11-27 03:00:01
【问题描述】:

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

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

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

在这种情况下,相同的数字是 23(在列 col1col2 中) - 我正在尝试从数据库编号 2(两行)中获取。我总是可以使用两个数字之一 - 在这种情况下是数字 3

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

【问题讨论】:

  • 要考虑这么多边缘情况......如果行 ID 4 有 col1 = 3col2 = 6 怎么办? (仍然计数 = 2?)如果第 5 行是 col1 = 6col2 = 3(这使它计数 = 4?)

标签: mysql sql select count


【解决方案1】:

对于您指定的非常狭窄的场景,我会试试这个:

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 |
+----+------------+---------+

【讨论】:

    【解决方案2】:

    你看起来像

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

    【讨论】:

      【解决方案3】:

      使用此查询:

      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&lt;col2, col1, col2), ',', IF(col1&lt;col2, col2, col1)) 的值将是 "2,3",(对于第三条记录,"4,5")。

      【讨论】: