MYSQL - 选择所有行,但在一列上使用Distinct

时间:2014-04-21 15:55:25

标签: mysql sql distinct rows

我有这样的表格数据

Column_a  | Column_b
  a       |    5
  b       |    25
  g       |    14
  t       |    13
  b       |    15
  c       |    04
  g       |    15
  b       |    13
<_>在column_a中我有很多重复值,我希望能够从表中选择所有行,但如果两行具有相同的column_a值,我只想要colum_b中具有最大值的行结果 例如我正在寻找的结果:

Column_a  | Column_b
  a       |    5
  b       |    25
  t       |    13
  c       |    04
  g       |    15

提前谢谢

**

  1. 问题更新
  2. **

    这些是我在表格中的列: CRMID |用户| ticket_id | |描述|日期|小时

    我要做的是从表中选择所有行,但是当两行具有相同的ticket_id时,我只希望最新的一行显示在结果中,所以具有最新日期和小时的行, 很抱歉这么复杂! 我不是母语为英语的人,我觉得很难解释这个问题。

5 个答案:

答案 0 :(得分:4)

如果按column_a进行分组,则可以使用max()等聚合函数来获取每个组的最大值

select column_a, 
       max(column_b) as column_b
from your_table
group by column_a

答案 1 :(得分:3)

SELECT Column_A, MAX(Column_B) FROM table
GROUP BY Column_A

答案 2 :(得分:2)

您正在寻找Group By条款。您的语法应该类似于:

SELECT Column_A, MAX(Column_B) 
FROM Table
GROUP BY Column_A

答案 3 :(得分:1)

如果要获取表中的所有列,则会出现其他问题(而不是原始发布中的问题)。您应该在这样的问题中添加代码的一个原因是,您可以获得更广泛的答案。举个例子,我忽略了这个问题,认为这只是一个新手询问明显的SQL功能。

在MySQL中,最好的方法是使用not exists

select t.*
from table t
where not exists (select 1
                  from table t2
                  where t2.column_a = t.column_a and
                        t2.column_b > t.column_b
                 );

为获得最佳性能,您需要table(column_a, column_b)上的索引。此外,如果存在重复的最大值,则可以返回多行。

此查询不直观。它正在做的是:“从表中获取所有行,其中没有其他行具有相同的column_a值和更高的column_b值”。如果你考虑一下,这与获得最大值相同。这比其他方法(特别是聚合和连接)具有更好的性能,因为MySQL对表中的每一行执行简单的索引查找。这比聚合和加入更快。

答案 4 :(得分:-1)

select * from(select * from yourtable order by column_b desc)t group by column_a