- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我有以下表(例如使用 PostgreSQL,但可以是任何其他关系数据库),其中 car
有两个键( id
和 vin
):
create table car (
id int primary key not null,
color varchar(10),
brand varchar(10),
vin char(17) unique not null
);
create table appraisal (
id int primary key not null,
recorded date not null,
car_id int references car (id),
car_vin char(17) references car (vin),
price int
);
c.color
和
c.brand
在选择列表中而不聚合它们,因为它们依赖于
c.id
:
select
c.id, c.color, c.brand,
min(price) as min_appraisal,
max(price) as max_appraisal
from car c
left join appraisal a on a.car_id = c.id
group by c.id; -- c.color, c.brand are not needed here
c.color
和
c.brand
在选择列表中,即使它确实依赖于
c.vin
(这是一个键)表。
select
c.vin, c.color, c.brand,
min(price) as min_appraisal,
max(price) as max_appraisal
from car c
left join appraisal a on a.car_vin = c.vin
group by c.vin; -- Why are c.color, c.brand needed here?
Error: ERROR: column "c.color" must appear in the GROUP BY clause or be used in an aggregate function Position: 18
最佳答案
因为只有 PK 覆盖了 GROUP BY
中基础表的所有列条款。因此,您的第一个查询有效。 A UNIQUE
约束没有。
不可延期的组合UNIQUE
和一个 NOT NULL
约束也符合条件。但这并没有实现 - 以及 SQL 标准已知的一些其他功能依赖项。该功能的主要作者 Peter Eisentraut 有更多想法,但当时确定需求低,相关成本可能很高。见 discussion about the feature on pgsql-hackers .
The manual:
When
GROUP BY
is present, or any aggregate functions are present, it is not valid for theSELECT
list expressions to refer to ungrouped columns except within aggregate functions or when the ungrouped column is functionally dependent on the grouped columns, since there would otherwise be more than one possible value to return for an ungrouped column. A functional dependency exists if the grouped columns (or a subset thereof) are the primary key of the table containing the ungrouped column.
PostgreSQL recognizes functional dependency (allowing columns to be omitted from
GROUP BY
) only when a table's primary key is included in theGROUP BY
list. The SQL standard specifies additional conditions that should be recognized.
c.vin
是
UNIQUE NOT NULL
,您可以改用 PK 列来修复您的第二个查询:
...
group by c.id;
appraisal
中的行在加入之前。这消除了对
GROUP BY
的需要在外
SELECT
先验。喜欢:
SELECT c.vin, c.color, c.brand
, a.min_appraisal
, a.max_appraisal
FROM car c
LEFT JOIN (
SELECT car_vin
, min(price) AS min_appraisal
, max(price) AS max_appraisal
FROM appraisal
GROUP BY car_vin
) a ON a.car_vin = c.vin;
关于sql - 当我按键聚合时,为什么不能从 `GROUP BY` 中排除依赖列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62095987/
我对 JavaScript 上的 onkeypress 事件有疑问。 是否可以仅检测 Cntl 键或 Alt 键?此时,如果同时按下 Cntl 和 m,则 onkeypress 事件可以触发单击。是否
我想知道按键中允许使用什么样的字符。它是否也生成一个符号下划线(_)?我总是得到一个带有 - 字母的按键。 最佳答案 按键使用修改过的 Base64 字母表: -0123456789ABCDEFGHI
我有以下格式的(格式错误的DITA)XML: BLARG BLARG Definition BLARG2 BLARG2 Definition BLARG3 BLARG3 Definition
我有两个单独的对象数组,如果特定键值匹配,我需要将它们合并。分析数据后可能更有意义: 数组 1 let categories = [ { id: 5, slug: 'category-5',
由于我是新手,所以我的低效编码给大家带来了巨大的麻烦,对此我提前表示歉意。 我正在尝试在 HTML5 Canvas 上使用 Javascript 制作一个非常基本的游戏,但我似乎找不到一种简单的方法来
我试图找出将多维数组中的对象 id 属性映射到共享相同 id 的另一个数组中的对象值的最佳方法。 举个例子,我有一个像这样的genre_ids数组: 0: {id: 1, name: 'sci-fi'
我有一个游戏,当按下一个键时,您可以通过将子弹添加到 Controller 类来发射子弹。这是代码来自 KeyPressed(); else if (key == KeyEvent.VK_Q && !
我想比较两个字典的长度以及每个字典中每个键、值对的长度。如果在查找时没有匹配项,我还需要能够打印出来。 我当前的代码似乎传递了长度标准,但在尝试匹配元素时失败: assert_that(len(mod
我正在寻找一种跨平台(Win 和 MacOS)方法来检测 C# 中 OpenGL 应用程序的按键。 以下有效,但仅适用于字母数字字符。 protected override void OnKeyPre
我正在 try catch 按键事件(向上和向下翻页),但根本没有收到任何按键事件。这是相关代码:构造函数: private MainLayout() { imageView = new Im
$(el).bind('blur keypress', function(event){ if(event.type == 'keypress' && event.keyCode != 13) r
我有这段代码: while (SDL_PollEvent(&event)) { if (event.type == SDL_KEYDOWN) { switch(event.key.keys
我正在使用下面的代码: $(document).keypress(function (e) { if (e.which === 68 || e.which === 100) {
我正在用 html 和 javascript 制作游戏。只是为了澄清,这不是重复或任何东西。没有什么可以给我我需要的答案。另外,在解释之前,我想说我对按键监听器没有任何问题,我的游戏知道何时按下按键以
我正在尝试用 Javascript 制作游戏,但目前我已经陷入停滞。我正在尝试检测按键并检查它们是否不断按下以移动 Angular 色。这是我正在使用的代码: var THREE; var keys;
我得到了多维数组。我想从每个子数组中删除/取消设置索引为 1 的值。我的数组 $data。 Array ( [3463] => Array ( [0]
我正在设计一个基于网络的会计软件。例如,每当用户按 N 键时,我想打开“新会计凭证”。并在他/她按下 S 键时打开“设置”。 我看到了一些基于 JavaScript 和 jQuery 的脚本。但它们并
阅读此主题后: Keypress events stopped working outside of "input" elements in Meteor after update to 0.5.2
所以,当我按下按钮 1“1 PLAY/STOP”时,按钮变成绿色,当我再次按下它时它会去除颜色。 如果我按下 button2“2 PLAY/STOP”,同样的事情会发生。 如果两个按钮之一播放而我按下
非常直接的问题。 只想按一个键盘键。像输入一样,使用 pywin auto。我不想在任何应用程序窗口的上下文中按下它。 只是键盘键的原始按键,如 a 或 enter 或退格。 最佳答案 只需使用 #
我是一名优秀的程序员,十分优秀!