仅显示重复列值中的第一个


Display only first of duplicate column values

如何查询擦除下面的视图?

+-------------------+------------+
| Order_id          |   Weight   |
| 20                |          4 | 
| 21                |          5 | 
| 22                |          2 | 
| 22                |          2 |
+-------------------+------------+

像这样:

+-------------------+------------+
| Order_id          |   Weight   |
| 20                |          4 | 
| 21                |          5 | 
| 22                |          2 | 
| 22                |            |
+-------------------+------------+

显示结果但未输入数据库时。

一个简单的方法是:

select DISTINCT order_id, weight from xyz
UNION
select order_id, null from xyz
group by order_id, weight
having count(*) > 1
Order by weight desc;

第一个select语句将显示所有唯一的值,第二个语句将仅检索重复的值。

在所需的输出表中,似乎要显示所有非重复行和重复行的第一列值,而不是第二列值。上面的查询将允许您执行此操作。

好吧,下面是如何做到的:

SELECT
   Order_id,
   Weight,
   if(@order_id = Order_id, '', Weight) as no_dup_weight,
   @order_id := Order_id as dummy
FROM      Table1
ORDER BY  Order_id asc;

您基本上需要检查以前的Order_id是否与当前的相同,如果是,则输出一个空字段。

下面是一个SQLFiddle演示解决方案。

您真的需要2行的重复数据吗?你不能按照http://www.mysqltutorial.org/mysql-distinct.aspx

还是重要的是要知道什么有重复。在这种情况下,您应该查看GROUP BY子句