相关疑难解决方法(0)

带有PostgreSQL的Rails 3.1:GROUP BY必须在聚合函数中使用

我正在尝试加载由user_id分组并由created_at排序的最新10种艺术.这适用于SqlLite和MySQL,但在我的新PostgreSQL数据库上出错.

Art.all(:order => "created_at desc", :limit => 10, :group => "user_id")
Run Code Online (Sandbox Code Playgroud)

ActiveRecord错误:

Art Load (18.4ms)  SELECT "arts".* FROM "arts" GROUP BY user_id ORDER BY created_at desc LIMIT 10
ActiveRecord::StatementInvalid: PGError: ERROR:  column "arts.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT  "arts".* FROM "arts"  GROUP BY user_id ORDER BY crea...
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

ruby postgresql ruby-on-rails

8
推荐指数
2
解决办法
9170
查看次数

SQL查找最受欢迎的类别

我的数据库(MySQL)中有3个表.

categories (name:string)
items (name:string, category_id:int)
votes (value:int, item_id:int, created_at:datetime)
Run Code Online (Sandbox Code Playgroud)

所以一个类别有很多项目,一个项目有很多选票.

我想编写一个查询来获取最受欢迎的类别,这意味着获取其项目在过去一周内获得最多票数(向上或向下)的类别.

我开始尝试更简单的东西,只是获得受欢迎的项目,但我真的只是猜测这一点,它不起作用.

SELECT *, COUNT(votes.item_id) AS score
FROM items
JOIN votes USING(item_id)
WHERE votes.created_at > #{1.week.ago}
ORDER BY COUNT(votes.item_id) DESC LIMIT 5;
Run Code Online (Sandbox Code Playgroud)

我真的不知道我在做什么,有什么想法吗?此外,如果有人知道如何做更好的高级选择,我很乐意阅读它.MySQL文档有点神秘,我不太了解'AS'和'JOINS'.

mysql sql

4
推荐指数
1
解决办法
9839
查看次数

将MySQL查询转换为PostgreSQL的问题

我有一个在MySQL上运行良好的查询,现在不在PostgreSQL上这是查询:

  SELECT "users".* 
    FROM "users" 
    JOIN "favorites" ON "favorites"."user_id" = "users"."id"
   WHERE users.id NOT IN (2)
     AND favorites.favoritable_id IN (1)
GROUP BY favorites.user_id 
ORDER BY RANDOM() 
   LIMIT 5
Run Code Online (Sandbox Code Playgroud)

这是错误:

列"users.id"必须出现在GROUP BY子句中或用于聚合函数

我查了一下这个错误,但无法找到我必须要解决的问题.

mysql sql postgresql group-by

3
推荐指数
1
解决办法
243
查看次数

必须出现在 GROUP BY 子句中或在聚合函数中使用 (PostgreSQL)

我有这样的查询:

select u.fullname ,s.schedate,
sum(case when s.isvisiting =1 then s.isvisiting else 0 end) as visit ,
count(s.custid) as cust, 
sum(case when s.isclosing = 1 then s.isclosing else 0 end)as orders 
from vmstrschedule s JOIN vmsmsuser u ON u.usercode = s.salesmanid 
where u.branchid = 'BLL' group by u.fullname
Run Code Online (Sandbox Code Playgroud)

但它显示这样的错误:

必须出现在 GROUP BY 子句中或在聚合函数中使用

它在 MySQL 中可以工作,但是当我在 PostgreSQL 中尝试它时,它不起作用。我想每月显示这样的数据:

在此输入图像描述

但如果我使用这个查询:

select u.fullname,s.schedate,
sum(case when s.isvisiting =1 then s.isvisiting else 0 end) as visit ,
count(s.custid) as cust, 
sum(case when s.isclosing = 1 …
Run Code Online (Sandbox Code Playgroud)

mysql postgresql

2
推荐指数
1
解决办法
1348
查看次数

标签 统计

mysql ×3

postgresql ×3

sql ×2

group-by ×1

ruby ×1

ruby-on-rails ×1