如何在两列中去除重复项并计算数量?

3

我有一个表:

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

如何编写SQL语句来计算具有不同'sail_id'的不同'u_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'。

您没有主键。在未来的开发过程中,这可能会带来问题。 - Strawberry
1个回答

3

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

SELECT COUNT(DISTINCT u_id,sail_id)
FROM tab;

SqlFiddle演示

2) 你可以使用带有DISTINCT的子查询:

SELECT COUNT(*)
FROM (SELECT DISTINCT u_id, sail_id
      FROM table) AS sub;

实时演示

3) 您可以使用带有 GROUP BY 的子查询:

SELECT COUNT(*)
FROM (SELECT u_id, sail_id
      FROM table
      GROUP BY u_id, sail_id) AS sub;

最后一种可能性是使用:

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

SqlFiddle演示


@Strawberry 哈哈哈,你说得完全正确。我以 SQL Server 为导向,在那里不支持这个语法。 - Lukasz Szozda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接