- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个问题。其中一个对我有意义,另一个对我没有意义。第一个:
SELECT gender AS 'Gender', count(*) AS '#'
FROM registrations
GROUP BY gender WITH ROLLUP
这给了我这个:
Gender #
Female 20
Male 19
NULL 39
所以,我得到了计数和总计数。我所期望的。下一个:
SELECT c.printable_name AS 'Country', count(*) AS '#'
FROM registrations r
INNER JOIN country c ON r.country = c.country_id
GROUP BY country WITH ROLLUP
Country #
Denmark 9
Norway 10
Sweden 18
United States 1
Uzbekistan 1
Uzbekistan 39
同样的结果。但为什么我得到乌兹别克斯坦的总数??
最佳答案
But why do I get Uzbekistan for the total??
因为您没有选择要分组的项目。如果你说:
GROUP BY c.printable_name
您会得到预期的 NULL。但是,您按不同的列进行分组,因此 MySQL 不知道 printable_name 正在参与汇总组,并在 所有 注册的连接中从该列中选择任何旧值。 (所以您可能会看到乌兹别克斯坦以外的其他国家/地区。)
这是一个更广泛的问题的一部分,MySQL 允许您在 GROUP BY 查询中选择什么。例如,你可以说:
SELECT gender FROM registrations GROUP BY country;
即使国家和性别之间没有直接的因果关系(又名“功能依赖”),MySQL 也会很高兴地为每个国家的注册选择一个性别值。其他 DBMS 将拒绝上述命令,理由是不能保证每个国家都是一种性别。(*)
现在,这个:
SELECT c.printable_name AS 'Country', count(*) AS '#'
FROM registrations r
INNER JOIN country c ON r.country = c.country_id
GROUP BY country
没问题,因为 r.country 和 c.printable_name 之间存在函数依赖关系(假设您已将 country_id 正确描述为 PRIMARY KEY)。
然而,MySQL 的 WITH ROLLUP 扩展在其工作方式上有点乱七八糟。在最后的汇总行阶段,它遍历整个预分组结果集以获取其值,然后然后将分组依据列设置为 NULL。 它不会同时清空对该列具有功能依赖性的其他列。它可能应该,但 MySQL 目前并不真正了解有关功能依赖性的全部内容。
因此,如果您选择 c.printable_name,它会显示它随机选择的国家名称值,如果您选择 c.country_id,它会显示它随机选择的国家 ID⟩— 即使 c.country_id 是连接标准, so 必须与 r.country 相同,为 NULL!
解决该问题的方法是:
(*: MySQL 有一个 SQL_MODE 选项 ONLY_FULL_GROUP_BY 应该可以解决这个问题,但它走得太远了,只允许您从 GROUP BY 中选择列,而不是对 GROUP BY 具有功能依赖性的列. 所以它也会使有效查询失败,使其通常无用。)
关于MySQL:总的 GROUP BY WITH ROLLUP 好奇心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40321592/
当我调用这个 promise 时,输出与函数调用的顺序不匹配。 .then出现在 .catch 之前, 即使 promise 与 .then之后被调用。这是什么原因? const verifier =
在 MIPS 程序集中清除寄存器 (=0) 的最快方法是什么? 一些例子: xor $t0, $t0, $t0 and $t0, $t0, $0 move $t0, $0 li
欧拉计划 - 3 --- 问题 我是编程艺术的初学者,我开始解决 Project Euler 问题。 我尝试用 C 语言解决第三个问题,但我不明白为什么它不起作用。 #include
我有一个相当简单但庞大的系统设置。它将数据存储在 void* 数组中,因为它存储的数据可能在 float 或 double 之间变化,具体取决于需要多少精度。 只是执行 delete [] data
谁能解释一下 mysqli multi_query() 的用途是什么?我不明白一个简单的 MySQLi 查询是否支持多语句,或者我是否被迫使用 multi_query() 来执行这样的查询: S
我有两个问题。其中一个对我有意义,另一个对我没有意义。第一个: SELECT gender AS 'Gender', count(*) AS '#' FROM registrations
我的一位同事正在使用内置的 max函数(在 Python 2.7 上),他发现了一个奇怪的行为。 错误地,他没有使用关键字参数 key(如 key=lambda n: n)对作为参数传递的列表进行预排
我有两个问题。其中一个对我有意义,另一个对我没有意义。第一个: SELECT gender AS 'Gender', count(*) AS '#' FROM registrations
我是 python 新手,正在为我的工作职能学习它。我正在遵循一个非常基本的初学者教程,其中大部分看起来非常熟悉并且与我使用的其他语言相似。但是......当我做非常简单的事情时 print('hel
一些编码实验(在尝试找到编码问题的较短答案时进行的)导致了一些有趣的惊喜: seq 2 | while head -n 1 ; do : ; done 输出(点击 Control-C 否则它将永远浪费
我目前正在进行一些最后的优化,主要是为了娱乐和学习,并发现了一些给我留下几个问题的东西。 首先是问题: 当我通过使用 DynamicMethod 在内存中构建方法时,并使用调试器,在反汇编 View
我想知道为什么分别相当于乘法和除法的移位运算符(>)的优先级低于加法运算符,例如“+”。 换句话说: int a = 1 + 2 * 8; //yields 17 鉴于: int a = 1 + 2
我一直在研究一些 .NET 功能(即管道、内存和数组池)以实现高速文件读取/解析。在使用 Array.Copy、Buffer.BlockCopy 和 ReadOnlySequence.CopyTo 时
这个问题更多是出于好奇而不是真正的问题。考虑以下代码(C# 4.0,如果重要的话): class Program { static Point myPoint = new Point(3, 5);
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: how to sum a large number of float number? 我有一个矩阵“x”,它
有人可以解释为什么这些在 Python 2.7.4 中输出不同的东西吗?他们在 python 3.3.1 中输出相同的东西。我只是想知道这是否是 2.7 中已在 3 中修复的错误,或者是否由于语言的某
我是一名优秀的程序员,十分优秀!