相关疑难解决方法(0)

选择每个GROUP BY组中的第一行?

正如标题所示,我想选择用a组成的每组行的第一行GROUP BY.

具体来说,如果我有一个purchases看起来像这样的表:

SELECT * FROM purchases;
Run Code Online (Sandbox Code Playgroud)

我的输出:

id | customer | total
---+----------+------
 1 | Joe      | 5
 2 | Sally    | 3
 3 | Joe      | 2
 4 | Sally    | 1

我想查询每个产品id的最大购买量(total)customer.像这样的东西:

SELECT FIRST(id), customer, FIRST(total)
FROM  purchases
GROUP BY customer
ORDER BY total DESC;
Run Code Online (Sandbox Code Playgroud)

预期产出:

FIRST(id) | customer | FIRST(total)
----------+----------+-------------
        1 | Joe      | 5
        2 | Sally    | 3

sql sqlite postgresql group-by greatest-n-per-group

1205
推荐指数
16
解决办法
95万
查看次数

PostgreSQL引入的JSONB解释

PostgreSQL刚刚推出了JSONB,它已经在黑客新闻上发展趋势.如果有人能够解释它与之前在PostgreSQL中出现的Hstore和JSON有何不同,那就太好了.它的优点和局限是什么?何时有人考虑使用它?

postgresql json nosql postgresql-json jsonb

304
推荐指数
9
解决办法
11万
查看次数

Postgres:区别但仅限于一列

我有一个关于pgsql的表,其名称(超过1 mio.行),但我也有很多重复.我选择3个字段:id,name,metadata.

我想用ORDER BY RANDOM()和随机选择它们LIMIT 1000,所以我这样做是为了在我的PHP脚本中保存一些内存.

但是我怎么能这样做,所以它只给我一个名单上没有重复的列表.

例如,[1,"Michael Fox","2003-03-03,34,M,4545"]将返回但不是[2,"Michael Fox","1989-02-23,M,5633"].名称字段是最重要的,每次我选择时都必须在列表中是唯一的,它必须是随机的.

我试过GROUP BY name,然后它希望我在GROUP BY同样或在aggragate函数中有id和元数据,但我不想让它们以某种方式过滤.

任何人都知道如何获取许多列,但只在一列上做一个不同的?

postgresql select distinct

109
推荐指数
3
解决办法
8万
查看次数

PostgreSQL按日期时间asc排序,先是null吗?

我需要按日期/时间字段对PostgreSQL表进行排序,例如last_updated.

但是,该字段允许为空或空,我想与空记录last_updated之前,非空last_updated.
这可能吗?

order by last_updated asc /* and null last_updated records first ?? */
Run Code Online (Sandbox Code Playgroud)

sql postgresql null sql-order-by

69
推荐指数
2
解决办法
4万
查看次数

PG ::错误:SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中

ActionView :: Template :: Error(PG ::错误:错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中

我正在创建一个事件网站,我正在尝试按事件的开始时间对呈现的rsvps进行排序.有很多RSVPS,所以我将它们分组,但我在过去的几天里在排序结果时遇到了很多困难而没有在PG上弹出这个错误.我已经看了一些关于这个主题的先前问题,但我仍然很丢失.我怎样才能让它发挥作用?非常感谢!

@rsvps = Rsvp.where(:voter_id => current_user.following.collect {|f| f["id"]}, :status => 'going').where("start_time > ? AND start_time < ?", Time.now, Time.now + 1.month).order("count_all desc").count(:group => :event_id).collect { |f| f[0] }

<%= render :partial => 'rsvps/rsvp', :collection => Rsvp.where(:event_id => @rsvps).select("DISTINCT(event_id)").order('start_time asc') %>
Run Code Online (Sandbox Code Playgroud)

ruby postgresql ruby-on-rails distinct ruby-on-rails-3

45
推荐指数
3
解决办法
5万
查看次数

Django order_by()过滤器使用distinct()

我怎么能这样做order_by......

p = Product.objects.filter(vendornumber='403516006')\
                   .order_by('-created').distinct('vendor__name')
Run Code Online (Sandbox Code Playgroud)

问题是我有多个同名的供应商,我只想要供应商的最新产品.

希望有道理吗?

我收到了这个DB错误:

SELECT DISTINCT ON表达式必须匹配初始ORDER BY表达式LINE 1:SELECT DISTINCT ON("search_vendor"."name")"search_product"...

django django-models django-aggregation django-filters

38
推荐指数
3
解决办法
2万
查看次数

选择按某些列排序的行和不同的列

与 - PostgreSQL DISTINCT ON有关,使用不同的ORDER BY

我有桌子购买(product_id,purchase_at,address_id)

样本数据:

| id | product_id |   purchased_at    | address_id |
| 1  |     2      | 20 Mar 2012 21:01 |     1      |
| 2  |     2      | 20 Mar 2012 21:33 |     1      |
| 3  |     2      | 20 Mar 2012 21:39 |     2      |
| 4  |     2      | 20 Mar 2012 21:48 |     2      |
Run Code Online (Sandbox Code Playgroud)

我期望的结果是每个address_id的最近购买的产品(完整行),并且结果必须由downloaded_at字段以后代顺序排序:

| id | product_id |   purchased_at    | address_id |
| 4  |     2      | …
Run Code Online (Sandbox Code Playgroud)

postgresql greatest-n-per-group distinct-on

21
推荐指数
2
解决办法
8011
查看次数

如何在django中使用子查询?

我想获得每个客户的最新购买清单,按日期排序.

以下查询执行我想要的日期除外:

(Purchase.objects
         .all()
         .distinct('customer')
         .order_by('customer', '-date'))
Run Code Online (Sandbox Code Playgroud)

它会产生如下查询:

SELECT DISTINCT ON 
    "shop_purchase.customer_id" 
    "shop_purchase.id" 
    "shop_purchase.date" 
FROM "shop_purchase" 
ORDER BY "shop_purchase.customer_id" ASC, 
         "shop_purchase.date" DESC;
Run Code Online (Sandbox Code Playgroud)

我被迫使用customer_id作为第一个ORDER BY表达因为DISTINCT ON.

我想按日期排序,所以我真正需要的查询应该是这样的:

SELECT * FROM (
  SELECT DISTINCT ON 
      "shop_purchase.customer_id" 
      "shop_purchase.id" 
      "shop_purchase.date" 
  FROM "shop_purchase" 
  ORDER BY "shop_purchase.customer_id" ASC, 
           "shop_purchase.date" DESC;
  )
AS result 
ORDER BY date DESC;
Run Code Online (Sandbox Code Playgroud)

我不想使用python排序,因为我仍然需要页面限制查询.数据库中可能有数万行.

实际上它现在在python中排序,并且导致非常长的页面加载时间,所以这就是我试图解决这个问题的原因.

基本上我想要这样的东西/sf/answers/685727311/.是否可以用django查询集来表达它而不是编写原始SQL?

实际的模型和方法有几页长,但这里是上面的查询集所需的模型集.

class Customer(models.Model):
  user = models.OneToOneField(User)

class Purchase(models.Model):
  customer = models.ForeignKey(Customer)
  date = models.DateField(auto_now_add=True)
  item = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

如果我有以下数据: …

django postgresql django-queryset

19
推荐指数
2
解决办法
7413
查看次数

错误:SELECT DISTINCT ON 表达式必须匹配初始 ORDER BY 表达式

我的要求是获得不同的记录并按顺序

User.joins('INNER JOIN report_posts ON posts.id = report_posts.post_id').select('DISTINCT ON (report_posts.post_id) posts.id as report_posts.id as reported_id, report_posts.reported_at').order('report_posts.reported_at desc')
Run Code Online (Sandbox Code Playgroud)

我知道这是不可能的postgresql,我已经用不同的 ORDER BY阅读了这个Postgresql DISTINCT ON

我想要它的解决方案,我该怎么做,它的替代方式?

ruby postgresql ruby-on-rails

6
推荐指数
1
解决办法
7070
查看次数

Rails - 加入后不同

我在 PostgreSQL 中使用 Rails 4.2。我有一个Product模型和一个Purchase带有Product has many Purchases. 我想找到最近购买的独特产品。最初我尝试过:

Product.joins(:purchases)
.select("DISTINCT products.*, purchases.updated_at") #postgresql requires order column in select
.order("purchases.updated_at DESC")
Run Code Online (Sandbox Code Playgroud)

然而,这会导致重复,因为它试图找到对 ( product.idand purchases.updated_at) 具有唯一值的所有元组。但是我只想id在加入后选择不同的产品。如果产品 ID 在连接中多次出现,请仅选择第一个。所以我也试过:

Product.joins(:purchases)
.select("DISTINCT ON (product.id) purchases.updated_at, products.*")
.order("product.id, purchases.updated_at") #postgres requires that DISTINCT ON must match the leftmost order by clause
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我需要product.idorder子句中指定,因为这个约束会输出意外的顺序。

实现这一目标的轨道方式是什么?

sql postgresql ruby-on-rails greatest-n-per-group ruby-on-rails-4.2

5
推荐指数
2
解决办法
6255
查看次数