gpt4 book ai didi

mysql - 从 group by 和 unique 获得不同的结果

转载 作者:行者123 更新时间:2023-11-29 08:25:03 25 4
gpt4 key购买 nike


这是我在这里发表的第一篇文章,因为大多数时候我已经找到了合适的解决方案:)
然而这一次似乎没有任何帮助。

我正在尝试从一些我只有只读访问权限的 mysql 数据库中迁移信息。
我的问题与此类似:
Group by doesn't give me the newest group
我还需要从一些表中获取最新信息,但我的表有 >300k 条目,因此检查“时间属性值”是否与子查询中的相同(如第一个答案中建议的那样)会太慢(一旦我执行了“... WHERE EXISTS ...”,服务器就挂了)。
除此之外,我很难在单个属性中找到重要信息(例如时间),并且从来没有单个主键。
直到现在,我都按照第二个答案中的建议,通过加入子查询来做到这一点包含最新的“时间属性条目”和一些主键,但是在对结果使用多个连接和联合后,这让我陷入了巨大的困惑。

因此,我更喜欢使用像这样的having语句:
Select entry with maximum value of column after grouping
但是当我尝试并寻找一个好的候选者作为“时间属性”时,我注意到这个查询给了我两个不同的结果(more = 39721,less = 37870)

SELECT COUNT(MATNR) AS MORE
FROM(
SELECT DISTINCT
LAB_MTKNR AS MATNR,
LAB_STG AS FACH,
LAB_STGNR AS STUDIENGANG
FROM
FKT_LAB
) AS TEMP1


 SELECT COUNT(MATNR) AS LESS
FROM(
SELECT
LAB_MTKNR AS MATNR,
LAB_STG AS FACH,
LAB_STGNR AS STUDIENGANG,
LAB_PDATUM
FROM
FKT_LAB
GROUP BY
LAB_MTKNR,
LAB_STG,
LAB_STGNR
HAVING LAB_PDATUM = MAX(LAB_PDATUM)
)AS TEMP2

尽管两者都应用于同一个表并在相同的条目上使用“GROUP BY”/“SELECT DISTINCT”。
有什么想法吗?
如果没有任何帮助,我必须回到我的困惑状态,我将使用字符串变量作为占位符来整理它,但随后我就失去了对一个查询中有多少子查询、联接和联合的概述......将有多少临时表服务器能够应付吗?

最佳答案

您的第二个查询没有执行您期望的操作。这是查询:

SELECT COUNT(MATNR) AS LESS
FROM (SELECT LAB_MTKNR AS MATNR, LAB_STG AS FACH, LAB_STGNR AS STUDIENGANG, LAB_PDATUM
FROM FKT_LAB
GROUP BY LAB_MTKNR, LAB_STG, LAB_STGNR
HAVING LAB_PDATUM = MAX(LAB_PDATUM)
) TEMP2;

问题出在 having 子句上。您将未聚合列 (LAB_PDATUM) 与聚合值 (MAX(LAB_PDATAUM)) 混合在一起。 MySQL 所做的就是为列选择一个任意值,并将其与最大值进行比较。

通常,任意值不会是最大值,因此行会被过滤。您提供的引用(尽管已接受的答案)不正确。我在那里发表了评论。

如果您想要最新的值,这里有一个相对简单的方法:

SELECT COUNT(MATNR) AS LESS
FROM (SELECT LAB_MTKNR AS MATNR, LAB_STG AS FACH, LAB_STGNR AS STUDIENGANG,
max(LAB_PDATUM) as maxLAB_PDATUM
FROM FKT_LAB
GROUP BY LAB_MTKNR, LAB_STG, LAB_STGNR
) TEMP2;

但是,它不会影响外部计数。

关于mysql - 从 group by 和 unique 获得不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18207837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com