- html - 我的下拉菜单的内容关闭得太快
- c# - 使用 Html Agility Pack 从网页中的表中获取值而不使用 "SelectNode'
- html - 内容容器下的 CSS 下拉菜单
- html - 如何停止嵌套列表重叠父列表?
我正在 csv 上使用 hadoop 来分析一些数据。我使用sql/mysql(不确定)来分析数据,现在陷入了僵局。
我花了好几个小时在谷歌上搜索,却没有找到任何相关的东西。我需要一个查询,在该查询中计算一列的数量以及列的总和或平均值,然后将它们相乘。
这不起作用:
SELECT model,
brand,
COUNT(model) AS ModelCount,
AVG(distance) AS DistanceAvg,
// OR SUM(distance) AS DistanceSum
// SUM(ModelCount * DistanceAvg) AS Total
// SUM(ModelCount * DistanceSum) AS Total
// SUM(COUNT(model)*AVG(distance)) AS Total
// SUM(COUNT(model)*SUM(distance)) AS Total
// None of the commented lines work
FROM cars
WHERE type = 'M1' OR type = 'M1G'
GROUP BY model, brand
ORDER BY ModelCount DESC;
其余代码工作正常,但注释的解决方案均不起作用。几个小时的谷歌搜索,没有运气。
理解我所追求的内容似乎存在问题,我需要弄清楚如何通过将计数值与平均值相乘得到结果,如下所示:
SUM(COUNT(model)*AVG(distance)) AS TOTAL
我想计算模型的数量,看看有多少个模型存在,这很好用。然后,我想获得该模型在该组中通过运行获得的所有汽车中的平均行驶距离。然后我希望查询将汽车数量乘以这些特定汽车的平均行驶距离。
我可以获得我需要的值并手动计算该值,我只是希望有一种方法可以跳过手动计算这个值,因为在这种规模上这是一项艰巨的工作。该列表中实际上有 500 万辆汽车,我无法在这些条件下手动工作。
不确定这是否有帮助,但这是工作查询,我需要在其中添加此内容:
SELECT mallimerkinta,
merkkiSelvakielinen,
COUNT(mallimerkinta) AS Suosituinmalli,
ROUND(AVG(CAST(matkamittarilukema AS FLOAT)),0) AS Keskilukema
FROM ajoneuvot
WHERE ajoneuvoluokka = 'M1' OR ajoneuvoluokka = 'M1G'
GROUP BY mallimerkinta, merkkiSelvakielinen
HAVING COUNT(mallimerkinta) > '4659'
ORDER BY Keskilukema DESC;
以下是它生成的结果:
mallimerkinta merkkiselvakielinen suosituinmalli keskilukema
4D COROLLA 1.6XLI-AE101L-AEMDKW/247 Toyota 4715 267686.0
5D MONDEO STW 1.8-BWY/275 Ford 6021 226086.0
5D FOCUS STW 1.6-DNW/262 Ford 10571 216980.0
5D GOLF VARIANT 1.6-1J/250 Volkswagen 13136 200201.0
V70 Farmari (AC) 4ov 2400cm3 A Volvo 5912 198062.0
4D FOCUS HATCHBACK 1.6-DAW/262 Ford 5899 197925.0
4D BORA SEDAN 1.6-1J/250 Volkswagen 4660 180550.0
5D COROLLA STW 1.6-ZZE121L-DWMDKW/260 Toyota 4999 180221.0
5D COROLLA STW 1.6-ZZE121L-DWMNKW/260 Toyota 4990 176687.0
4D ALMERA SEDAN 1.5-BAAN16/254 Nissan 8421 156514.0
XC60 Farmari (AC) 4ov 2400cm3 A Volvo 7900 113591.0
GOLF Farmari (AC) 4ov 1390cm3 Volkswagen 6215 87724.0
FOCUS Farmari (AC) 4ov 1596cm3 Ford 5063 86598.0
GOLF Farmari (AC) 4ov 1390cm3 A Volkswagen 5634 83164.0
CEED Monik�ytt�ajoneuvo (AF) 4ov 1591cm3 Kia 5191 78059.0
TOYOTA AVENSIS Monik�ytt�ajoneuvo (AF) 4ov 1798cm3 Toyota 6384 68166.0
NISSAN QASHQAI Monik�ytt�ajoneuvo (AF) 4ov 1598cm3 Nissan 10595 59330.0
FIESTA Viistoper� (AB) 4ov 1242cm3 Ford 5631 58837.0
TOYOTA AURIS Monik�ytt�ajoneuvo (AF) 4ov 1798cm3 Toyota 5558 56878.0
TOYOTA YARIS Monik�ytt�ajoneuvo (AF) 4ov 1329cm3 Toyota 11829 40348.0
我需要 suosituinmalli 乘以 keskilukema 作为附加列。
最佳答案
SELECT mallimerkinta,
merkkiSelvakielinen,
COUNT(mallimerkinta) AS Suosituinmalli,
ROUND(AVG(CAST(matkamittarilukema AS FLOAT)),0) AS Keskilukema,
COUNT(mallimerkinta) * ROUND(AVG(CAST(matkamittarilukema AS FLOAT)),0) AS DesiredColumn
FROM ajoneuvot
WHERE ajoneuvoluokka = 'M1' OR ajoneuvoluokka = 'M1G'
GROUP BY mallimerkinta, merkkiSelvakielinen
HAVING COUNT(mallimerkinta) > '4659'
ORDER BY Keskilukema DESC;
也可以这样做:
SELECT
t.*
,t.Suosituinmalli * t.Keskilukema AS DesiredColumn
FROM
(
SELECT mallimerkinta,
merkkiSelvakielinen,
COUNT(mallimerkinta) AS Suosituinmalli,
ROUND(AVG(CAST(matkamittarilukema AS FLOAT)),0) AS Keskilukema,
FROM ajoneuvot
WHERE ajoneuvoluokka = 'M1' OR ajoneuvoluokka = 'M1G'
GROUP BY mallimerkinta, merkkiSelvakielinen
HAVING COUNT(mallimerkinta) > '4659'
) t
ORDER BY Keskilukema DESC;
其他人在评论中所说的是,您不能在另一个动态列的定义中使用列别名。因此,在上面的示例中,您声明了 SUM(ModelCount * DistanceAvg)
但 ModelCount
和 DistanceAvg
是同一 select 语句的列别名,因此它们不能类似的引用,但是您可以这样做(COUNT(MODEL) * AVG(DISTANCE))
。因此,有两种方法可以解决该问题,或者重复您想要在新列的定义中引用的列的定义,例如第一个示例。或者第二个是您可以将选择语句变成子选择。然后,外部选择将了解您的列别名并允许您在新动态列的定义中使用它们。
关于mysql - SUM(COUNT(列)*AVG(列)) AS 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39069914/
我是一名优秀的程序员,十分优秀!