gpt4 book ai didi

mysql - 如果在 HAVING 比较中使用某个列,MySQL 是否使用该列中的第一个值?

转载 作者:行者123 更新时间:2023-11-29 13:15:36 26 4
gpt4 key购买 nike

我已经知道下面是糟糕的 SQL 代码,但是编写它提出了一个关于 MySQL 如何处理比较中的列的问题。

任务是确定在两个给定日期之间售出最多产品的品牌。以下代码产生正确的答案(注意在内部查询中使用 ORDER BY):

Select SUB.Brand_id, SUB.Brand_name, SUB.Brand_Type, SUB.Total <p>
FROM
(
Select Brand_id, Brand_name, Brand_Type, SUM(line_qty) AS Total
FROM LGLINE
NATURAL JOIN LGINVOICE
NATURAL JOIN LGPRODUCT
NATURAL JOIN LGBRAND
Where INV_Date Between '2011-11-01' AND '2011-12-05'
Group by Brand_name
Order by Total DESC -- Note the order by in the subquery
) as SUB
HAVING (MAX(SUB.TOTAL) = SUB.Total);

这会产生一条记录,这是正确的答案:

“30”、“长途”、“承包商”、“590”

相比之下,以下代码(没有子查询 ORDER BY)不会产生任何结果:

Select SUB.Brand_id, SUB.Brand_name, SUB.Brand_Type, SUB.Total <p>
FROM
(
Select Brand_id, Brand_name, Brand_Type, SUM(line_qty) AS Total
FROM LGLINE
NATURAL JOIN LGINVOICE
NATURAL JOIN LGPRODUCT
NATURAL JOIN LGBRAND
Where INV_Date Between '2011-11-01' AND '2011-12-05'
Group by Brand_name
-- Order by Total DESC. NOTE: I have commented out this line
) as SUB
HAVING (MAX(SUB.TOTAL) = SUB.Total);

我怀疑MySQL将等号后的SUB.Total解释为SUB.Total中的第一个 列。两部分问题:

1) 我可以以任何方式使用 MySQL 来证实我的怀疑吗?有没有办法使用 EXPLAIN 或任何其他语句来提供帮助?

2)如果我的怀疑是正确的,这似乎是一个相当武断的设计决定。我希望能出现错误。是否有任何 SQL 文档表明这是正确(或不正确)的行为?

请注意,这很大程度上是一个学术问题,因为我可以重写查询并完成它。不过,我对这对 MySQL 的工作原理感兴趣。

最佳答案

mysql> SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+
10 rows in set (0.00 sec)

mysql> SELECT * FROM ints HAVING i > 7;
+---+
| i |
+---+
| 8 |
| 9 |
+---+
2 rows in set (0.00 sec)

mysql> SELECT 1 FROM ints HAVING i > 7;
ERROR 1054 (42S22): Unknown column 'i' in 'having clause'
mysql>

关于mysql - 如果在 HAVING 比较中使用某个列,MySQL 是否使用该列中的第一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21505278/

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