这个问题是关于查询优化,以避免通过PHP多次调用数据库.
所以这是场景,我有两个表,其中包含您可以将其称为参考表的信息,另一个是数据表,字段key1并且key2在两个表中都是通用的,基于这些字段,我们可以加入它们.
我不知道查询是否可以比我现在正在做的更简单,我想要实现的如下:
我希望找到
key1,key2,info1,info2与main_info表不同的,每当串行值小于10并且key1,key2两个表匹配时,然后将它们info1,info2分组,而分组计数key1,key2重复的info1,info2字段和group_concat那些键的重复
表的内容 main_info
MariaDB [demos]> select * from main_info;
+------+------+-------+-------+----------+
| key1 | key2 | info1 | info2 | date |
+------+------+-------+-------+----------+
| 1 | 1 | 15 | 90 | 20120501 |
| 1 | 2 | 14 | 92 | 20120601 |
| 1 | 3 | 15 | 82 | 20120801 |
| 1 | 4 …Run Code Online (Sandbox Code Playgroud) 首先,这是一个课程作业问题,所以我不是在寻找完整的答案,只是一个提示:)
我有一个“君主”数据库,用于存储姓名、房屋(?)、登基、加冕(?),用于跟踪君主(包括首相)。宫位和加冕礼仅适用于君主,如果君主是首相,则返回 null。它看起来如下:
我需要编写一个返回scheme(house,seventeenth,eighteenth,nineteenth,twentieth)的psql查询,列出17、18、19和20世纪每个王室继承王位的君主数量,并且有添加什么内容作为我的 THEN 查询的问题。
编辑: 谢谢您的建议!我现在对我的查询做了一些更改:
SELECT house,
TO_CHAR(accession, 'YYYY' ) AS accession_year,
COUNT(CASE WHEN accession_year BETWEEN 1601 AND 1700 THEN name END) AS seventeenth,
COUNT(CASE WHEN accession_year BETWEEN 1701 AND 1800 THEN name END) AS eighteenth,
COUNT(CASE WHEN accession_year BETWEEN 1801 AND 1900 THEN name END) AS nineteenth,
COUNT(CASE WHEN accession_year BETWEEN 1901 AND 2000 THEN name END) AS twentieth,
FROM monarch
WHERE house IS NOT NULL
GROUP BY house
;
Run Code Online (Sandbox Code Playgroud)
现在 psql 告诉我 accession_year 不存在。我不想在 CASE …
我在理解此示例中发生的事情时遇到了麻烦
立即学习 Prolog -第 3 章- 示例 3:后继
numeral(0).
numeral(succ(X)) :- numeral(X).
Run Code Online (Sandbox Code Playgroud)
当询问number(X)时,它首先给X赋值0,然后继续succ(0),以这种方式将succ(0)部分加1,直到它用完空间:
X = 0 ?
X = succ(0) ? ;
X = succ(succ(0)) ? ;
X = succ(succ(succ(0))) ? ;
X = succ(succ(succ(succ(0)))) ?
Run Code Online (Sandbox Code Playgroud)
我很难理解为什么它会增加 succ(0)?
我知道 prolog 会首先找到一个事实并匹配它,因此是第一个 0。然后它会回溯看看是否有任何其他解决方案,它会“看到”规则。在规则中,它将使用实例化的 X 到 0。我失败的地方是看它为什么不断增加 succ(0)。X 是否变为 succ(0),而不仅仅是 0?
我为愚蠢的大脑道歉。
当谈到算法的空间复杂度时,我感到很困惑。理论上,它对应于算法使用的额外堆栈空间,即输入以外的空间。然而,我很难指出这到底是什么意思。
例如,如果我有一个以下的强力算法来检查数组中是否没有重复项,这是否意味着它使用 O(1) 额外的存储空间,因为它使用 int j 和 int k?
public static void distinctBruteForce(int[] myArray) {
for (int j = 0; j < myArray.length; j++) {
for (int k = j + 1; k < myArray.length; k++) {
if (k != j && myArray[k] == myArray[j]) {
return;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)