如何计算两列中没有重复?

时间:2015-11-29 21:34:10

标签: php mysql sql performance count

我有桌子:

+----------------+
| table          |
+----------------+
| u_id | sail_id |
+----------------+
| 1    | 5       |
| 1    | 5       |
| 2    | 5       |
| 2    | 4       |
| 1    | 4       |
+----------------+

如何编写sql语句来计算具有不同u_id的不同sail_id(意味着没有重复)?

实施例: 如果SELECT COUNT(*) FROM table GROUP BY sail_id,则结果为2

如果SELECT COUNT(*) FROM table GROUP BY sail_id, user_id,则结果为1

我需要结果为4(因为有5行,只有第一行和第二行具有相同的u_id和sail_id)。 也许我需要在某处添加DISTINCT

1 个答案:

答案 0 :(得分:3)

1)您可以使用COUNT(DISTINCT ...)

SELECT COUNT(DISTINCT u_id,sail_id)
FROM tab;

SqlFiddleDemo

2)您可以将子查询与DISTINCT

一起使用
SELECT COUNT(*)
FROM (SELECT DISTINCT u_id, sail_id
      FROM table) AS sub;

LiveDemo

3)您可以将子查询与GROUP BY

一起使用
SELECT COUNT(*)
FROM (SELECT u_id, sail_id
      FROM table
      GROUP BY u_id, sail_id) AS sub;

4)最后的可能性是使用:

SELECT COUNT(DISTINCT CONCAT(u_id,',',sail_id))
FROM table;

SqlFiddleDemo