【问题标题】:Group by clause usage in PostgresqlPostgresql 中的 Group by 子句用法
【发布时间】:2020-06-07 15:46:07
【问题描述】:

我有一个代码:

SELECT mac, rssi, esp32cihaz FROM esp32tri where rssi<0 group by esp32cihaz ORDER BY esp32cihaz DESC LIMIT 3

但我有一个错误SQL state: 42803 我的桌子

mac      rssi        esp32cihaz
ac       -61,3636      rssi1
ac        -60,8974     rssi2
ac      -63,8462       rssi3
ac      -69            rssi3
ac      -68,75         rssi3

我想要的输出

mac      rssi        esp32cihaz
ac       -61,3636      rssi1
ac        -60,8974     rssi2
ac      -63,8462       rssi3

我的错误在哪里?

感谢您的帮助

【问题讨论】:

  • group by 作为聚合操作。需要聚合函数,如max、sum、avg ..等
  • 你能举个例子或说明为什么这样做有效吗?
  • 总是不正确
  • 这是你的数据还是输出
  • 这是我的数据

标签: node.js postgresql group-by


【解决方案1】:

如果group by 子句和select 语句,聚合函数中不存在的所有列必须出现在group by 子句中。否则会抛出SQL state: 42803错误

在您的情况下,您应该在group by 子句中提及所有 3 列,如下所示,因为您没有在查询中使用任何聚合函数:

SELECT mac,min(rssi),esp32cihaz FROM esp32tri where rssi<0 group by mac,esp32cihaz ORDER BY esp32cihaz 

考虑到字段rssi 是数字

DEMO

【讨论】:

  • 我想要三个不同的 esp32cihaz。在你的代码中我无法得到按 esp32cihaz 分组的三个不同的行
  • 那么您应该在问题中提供表架构、数据和所需的输出。编辑您的问题并添加它。我刚刚给出了您的错误的解决方案。
  • 谢谢你。最后一个问题。此代码也适用于不同的 mac?
  • 是的,它适用于 macesp32cihaz 的不同组合。 See Here.
猜你喜欢
  • 1970-01-01
  • 2021-11-13
  • 2016-04-03
  • 2016-05-09
  • 1970-01-01
  • 2012-04-27
  • 2012-04-20
  • 2011-09-25
  • 2015-02-26
相关资源
最近更新 更多