我的问题是:为什么以下两个SQL语句产生不同的结果(我之后解释。使用XAMPP 7.0.8测试MariaDB)
(1)
SELECT
stock_exchange_code,
summed
FROM (
SELECT
stock_exchange_code,
summed
FROM (
SELECT
STOCK_EXCHANGE_CODE,
sum(SHARE_PRICE * SHARE_CNT) AS summed
FROM LISTED_AT
WHERE DATE_VALID = STR_TO_DATE('04-12-2015', '%d-%m-%Y')
GROUP BY STOCK_EXCHANGE_CODE
) a) b
HAVING summed > avg(summed)
(2)
SELECT
stock_exchange_code,
summed
FROM (
SELECT
STOCK_EXCHANGE_CODE,
sum(SHARE_PRICE * SHARE_CNT) AS summed
FROM LISTED_AT
WHERE DATE_VALID = STR_TO_DATE('04-12-2015', '%d-%m-%Y')
GROUP BY STOCK_EXCHANGE_CODE
) a
WHERE summed > (SELECT avg(a.summed)
FROM (SELECT
sum(SHARE_PRICE * SHARE_CNT) AS summed
FROM LISTED_AT
WHERE DATE_VALID = STR_TO_DATE('04-12-2015', '%d-%m-%Y')
GROUP BY STOCK_EXCHANGE_CODE) a)
这些查询的结果: (1)会给你一套空的(我不明白为什么) (2)会给你2行,这是正确的答案
2个Select语句的说明:
SELECT
STOCK_EXCHANGE_CODE,
sum(SHARE_PRICE * SHARE_CNT) AS summed
FROM LISTED_AT
WHERE DATE_VALID = STR_TO_DATE('04-12-2015', '%d-%m-%Y')
GROUP BY STOCK_EXCHANGE_CODE
这是Select语句的一部分,它汇总了特定证券交易所的所有股票价值。 输出是:
BRX 122653.50
L& S 275000.00
MXK 500000.00
STU 140415.00
XETRA 254610.00
和AVG(求和)= 258535.6
使用声明(1)[我先尝试过]我使用select来确定group by是全局的。现在看一下,有一个不必要的" serlect所有列名称",bur这应该不重要。使用外部选择我尝试应用" HAVING"子句。
我确实希望所有在特定日期汇总价值(=>"汇总")的证券交易所高于平均水平。据我了解HAVING,它应该计算全球平均值(=以上5个证券交易所的>)并对此进行检查。
我不知道,为什么这不起作用。将summed > avg(summed)
更改为summed <> avg(summed)
会产生一行(BRX 122653.50)。
summed > 0
会返回所有5行。
这就是为什么我认为平均值不适用于而不是相反的方式。
(2)
这与第一个完全相同,用更多的explecit平均值计算替换HAVING子句。正如您所看到的,有2个子查询的名称为&#34; a&#34;两者都是相同的(第二个缺少stock_exchange_code
字段。实际上这个查询与第一个查询相同,代码质量比第一个更严重(重复)。
我的问题是:对我来说,2个查询应该有相同的结果。为什么他们有不同的结果?
TL;博士
Average或having子句在MySQL(MariaDB)中似乎不起作用。为什么从一开始的2个SQL语句不会返回相同的内容?