我想运行此查询:
SELECT DISTINCT ON (address_id) purchases.address_id, purchases.*
FROM purchases
WHERE purchases.product_id = 1
ORDER BY purchases.purchased_at DESC
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
PG ::错误:错误:SELECT DISTINCT ON表达式必须与初始ORDER BY表达式匹配
添加address_id为第一个ORDER BY表达式会使错误无效,但我真的不想添加排序address_id.是否可以不通过订购address_id?
我对这些之间的差异感到困惑.运行以下SQL会获得两个完美的结果集.有人可以解释一下这些差异吗?
SELECT ID, [Description], RANK() OVER(PARTITION BY StyleID ORDER BY ID) as 'Rank' FROM SubStyle
SELECT ID, [Description], ROW_NUMBER() OVER(PARTITION BY StyleID ORDER BY ID) as 'RowNumber' FROM SubStyle
Run Code Online (Sandbox Code Playgroud) 我一直在将一些MySQL查询迁移到PostgreSQL以使用Heroku.我的大多数查询工作正常,但当我使用group by时,我仍然遇到类似的重复错误:
错误:列"XYZ"必须出现在GROUP BY子句中或用于聚合函数
有人能告诉我我做错了什么吗?
MySQL 100%工作:
SELECT `availables`.*
FROM `availables`
INNER JOIN `rooms` ON `rooms`.id = `availables`.room_id
WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24')
GROUP BY availables.bookdate
ORDER BY availables.updated_at
Run Code Online (Sandbox Code Playgroud)
PostgreSQL错误:
ActiveRecord :: StatementInvalid:PGError:错误:列"availables.id"必须出现在GROUP BY子句中或用于聚合函数:
SELECT"availables".*FROM"availables"INNER JOIN"rooms"ON"rooms". id ="availables".room_id WHERE(rooms.hotel_id = 5056 AND availables.bookdate BETWEEN E'2009-10-21'EN'E'2009-10-23')GROUP BY availables.bookdate ORDER BY availables.updated_at
生成SQL的Ruby代码:
expiration = Available.find(:all,
:joins => [ :room ],
:conditions => [ "rooms.hotel_id = ? AND availables.bookdate BETWEEN ? AND ?", hostel_id, date.to_s, (date+days-1).to_s ], …Run Code Online (Sandbox Code Playgroud) 我有一个表"campaign_items",其中包含列(预算,花费),我想使用公式剩余预算计算剩余预算=预算 - 已用完
现在我在查询下运行:
select distinct a.budget,a.spent
from campaign_items a
where campaign_item_id=12345
order by a.budget-a.spent
Run Code Online (Sandbox Code Playgroud)
但是我收到了错误:
错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中
注意:我无法DISTINCT从查询中删除关键字,因为查询是使用JdbcTemplate生成的
任何人都可以帮我解决这个错误吗?