php - 如何在两列中不重复计数?

标签 php mysql sql performance count

我有 table :

+----------------+
| 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) 您可以使用 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

关于php - 如何在两列中不重复计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33988413/

相关文章:

PHP 从 DELETE 请求中获取数据

php - 我如何在订单页面中调用我的mysqli?

php - MySQL |选择某一天的列数据的最简单方法

sql - 使用带有条件语句的数据库

sql - 在 SQL Server XML 数据类型上使用 LIKE 语句

sql - 在sql数据库中查询

php - 为 PHP 的 Windows 命令行输出着色

mysql - 列的列说明符不正确

mysql - 查找并删除 MySQL 表中的重复条目

php - Access-Control-Allow-Origin 未出现在 codeigniter 的响应 header 中