【问题标题】:How to use order by with distinct in mysql? [duplicate]如何在mysql中使用order by with distinct? [复制]
【发布时间】:2019-03-06 17:01:15
【问题描述】:

我有两张桌子客户和交换。我想通过运行左连接查询来获取客户 ID。但是当我运行查询时,它会抛出一个错误。

select distinct
    `clients`.`id` as `client_id`
from `clients`
left join `exchange`
    on `clients`.`id` = `exchange`.`client_id`
where
    `clients`.`iex_status` = 'Active'
order by
    `exchange`.`validity_to` desc 

错误:

【问题讨论】:

  • 您遇到错误的查询在`clients`.`id` as `client_id` 附近有(),这是导致错误的原因。
  • 我没有看到您的代码有任何问题,并且您问题中的查询可能甚至不是您实际运行以生成此错误的查询。注意:您不需要那些丑陋的反引号,因此您可以删除它们。
  • 还有其他方法吗?
  • 去掉()后你的输出是什么?它仍然导致错误吗?
  • 您希望如何订购 (c1, c2) 数据 (1,3), (2,2), (1,1), select distinct c1 ... order by c2

标签: mysql sql


【解决方案1】:

exchange.validity_to此列添加到选择中,否则会抛出此错误validity_to不在SELECT列表中;这与 DISTINCT 不兼容

select distinct
    clients.id as client_id,exchange.validity_to
from clients
left join exchange
    on clients.id = exchange.client_id
where
    clients.iex_status = Active
order by
    exchange.validity_to desc

但从您的屏幕截图看来,您在 distinct 之后使用了括号,这就是您收到错误的原因

【讨论】:

  • @Strawberry,当 SELECT DISTINCT 时,只能在 ORDER BY 中使用结果集列。但是,这个答案并不能解决 OP 的问题。
  • @Strawberry dbfiddle.uk/… 你能看看这个关于 distinct 和 order by 的链接吗
  • 提问者不想选择该列,因为这不是解决方案。有关提问者的需求,请参阅问题上的重复链接。
  • @jarlh 啊,我的立场是正确的。这是 MySQL 8 的一个新特性,在 MySQL 5.x 中不存在(显示我有多过时),在 MariaDB 中也不存在。无论如何,我怀疑它与 OP 的问题有关。
【解决方案2】:

希望你做得好,我检查了你的查询,但发现了 2 个差异。积分 1:“选择不同的clients.id作为client_idclients左加入exchangeclients.id=exchange.client_idiex_status1exchange1。 exchange.validity_to desc "的“活动”顺序"

您首先显示此查询并在您的查询中显示错误

2:您在 sql 中执行的查询中使用了“(”,我认为您的第一个查询是正确的,它将为您提供正确的结果。

所以请不要在不同的字段中使用 ()。

谢谢

【讨论】:

  • 那我怎样才能得到唯一的结果呢?
  • 我正在使用这个查询:选择不同的clients.id作为c_id from clients left join exchange on clients.id = exchange.client_id where clients.iex_status = 'Active' order by exchange.validity_to desc跨度>
  • @AJ 通过编辑而非 cmets 进行澄清。给minimal reproducible example
【解决方案3】:

根据您附加的图片,您可以将大括号中的别名修改为 -

select distinct
    (`clients`.`id` as `client_id`) as 'client_id'
from `clients`
left join `exchange`
    on `clients`.`id` = `exchange`.`client_id`
where
    `clients`.`iex_status` = 'Active'
order by
    `exchange`.`validity_to` desc 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多