sql 语句多层嵌套查询 使用别名 字段无效,如何解决(有图)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 语句多层嵌套查询 使用别名 字段无效,如何解决(有图)相关的知识,希望对你有一定的参考价值。
SELECT
tma.id as tid,
tma.match_id AS matchId,
tma.`status`,
(SELECT round(avg(s.sumScore),1) FROM (
SELECT
SUM(tri.score) AS sumScore
FROM
`triz_score_info` tri LEFT JOIN triz_review_submit_info trs ON trs.reviewer_id = tri.reviewer_id
WHERE
tri.apply_id = tma.id
GROUP BY
tri.reviewer_id)AS s
) AS avgScore,
tma.pro_name AS proName,
tma.create_time createTime
FROM
triz_match_applyinfo tma
WHERE
tma.match_id = 22
SELECT
SUM(tri.score) AS sumScore
FROM
`triz_score_info` tri LEFT JOIN triz_review_submit_info trs ON trs.reviewer_id = tri.reviewer_id
WHERE
tri.apply_id = tma.id
GROUP BY
tri.reviewer_id)AS s
改为
select round(avg(s.sumScore),1) from ( SELECT
SUM(tri.score) AS sumScore,tri.apply_id
FROM
`triz_score_info` tri LEFT JOIN triz_review_submit_info trs ON trs.reviewer_id = tri.reviewer_id group by tri.reviewer_id,tri.apply_id) aa where aa.apply_id=tma.id
这样应该可以。另外我多句嘴,avg那块我没看懂你怎么平均(一般都是分组直接用啊),或者说是按照什么平均。内层sql求出一个总数,外层直接计算一个平均值,这个平均值是什么?我不知道你的业务结构仅仅是臆测,反正我没看懂(直接照抄了)。追问
每个作品(aa.apply_id)有多个老师评分(tri.reviewer_id),每次打分有多个打分项(tri.score),SUM(tri.score)就是当前作品该老师打的总分
我需要查的是所有作品的得分情况(多个老师打的平均分)
根据你的解释,我觉得我的写法上应该能满足要求。第一步求的是每个作品的而每个老师给的一个总分,第二步是每个作品的平均分。应该没什么问题。
不过你的trs表是干什么用的,这里是左连接,而且后面好像也没有用到,不写是不是也可以。
trs表是确认老师有没有提交打分信息(只查询提交过的分数信息)
昨天试了,你的sql能实现呢,非常感谢!
那遇到这种情况怎么解决啊
追答看看sql方面得书,多写写sql就行了
参考技术B 你好!你把这个SQL发出来啊!
我给你改一下就好啦!
完后希望你采纳!追问
发出来了,麻烦你看一下
如何从子查询中获取 ResultSet 的别名?
【中文标题】如何从子查询中获取 ResultSet 的别名?【英文标题】:How can I get the alias name for my ResultSet from a Subquery? 【发布时间】:2015-02-20 08:12:29 【问题描述】:我在获取 ResultSet 的列名别名时遇到问题。
我做了一个子查询,我在其中使用别名函数(SQL 中的 MAX(...)),但每次执行语句时,我都会得到 java.sql.SQLException
,因为列名无效。我使用当前别名调用 getString
- 我的 ResultSet 的函数。
这是我在 Eclipse 中的 SQL 语句:
String sql = "SELECT a.steelgrade, a.prod_order_id, a.prod_order_item_pos, "
+"a.prod_order_version, a.strip_thickn_aim, a.strip_width_aim, "
+"a.customer, a.order_weight_plan, b.grund_kommlos, b.coil_weight "
+"FROM (SELECT prod_order_id, prod_order_item_pos, "
+ "MAX (prod_order_version) AS max_version "
+ "FROM production_order "
在结果集中while.next()
-Loop:
prod_order_version = AuftraegeProduction.getString("max_version");
这是整个 SQL 语句(在数据库中它工作正常!):
SELECT a.steelgrade, a.prod_order_id, a.prod_order_item_pos,
a.prod_order_version, a.strip_thickn_aim, a.strip_width_aim,
a.customer, a.order_weight_plan, b.grund_kommlos, b.coil_weight
FROM (SELECT prod_order_id, prod_order_item_pos,
MAX (prod_order_version) AS max_version
FROM production_order
GROUP BY prod_order_id, prod_order_item_pos) c
JOIN
production_order a
ON a.prod_order_id = c.prod_order_id
AND a.prod_order_item_pos = c.prod_order_item_pos
AND a.prod_order_version = c.max_version
JOIN pps_plan_slab b
ON b.prod_order_id = c.prod_order_id
AND b.prod_order_item_pos = c.prod_order_item_pos
AND b.prod_order_version = c.max_version
WHERE a.strip_thickn_aim > 1.78
AND a.strip_thickn_aim < 3.26
AND a.steelgrade = 'M4R51'
AND a.prod_order_id NOT BETWEEN '0999551' AND '0999599'
AND a.strip_width_aim BETWEEN 1126 AND 1166
AND NVL (a.order_weight_plan, 0) > 0
AND a.order_weight_plan >= b.coil_weight
ORDER BY prod_order_id ASC
有人有什么建议吗?
莫里斯
【问题讨论】:
您是否尝试直接在数据库中手动运行查询?似乎它缺少了一些东西......也许group by
?顺便说一句,如果您标记您正在使用的数据库,将不胜感激......
是的,我之前在数据库中执行了语句,以检查我的 SQL 查询是否一切正常。在数据库中,它可以工作!在这种情况下,我使用 Oracle 数据库。
首先,您缺少一个右括号 - 所以它不可能“按原样”运行。二、不分组真的能跑:SELECT prod_order_id, prod_order_item_pos, MAX (prod_order_version) AS max_version FROM production_order
吗?可能我太久没接触Oracle DB了……
我创建了一个“GROUP BY”,但还是不行:“...GROUP BY prod_order_id, prod_order_item_pos) c
正如我在最初的评论中所写的:首先让查询在数据库上运行,然后开始担心让它与您的代码一起工作!
【参考方案1】:
当使用聚合函数 max(),min(),sum(),... 时,必须使用 group by 子句。
【讨论】:
好的,到目前为止,我已经编辑了 SQL 语句:'code' String sql2 = "SELECT a.steelgrade, a.prod_order_id, a.prod_order_item_pos, " +"a.prod_order_version, a. strip_thickn_aim, a.strip_width_aim, " +"a.customer, a.order_weight_plan, b.grund_kommlos, b.coil_weight " +"FROM (SELECT prod_order_id, prod_order_item_pos, " + "MAX (prod_order_version) AS max_version " + "FROM production_order " + "GROUP BY prod_order_id, prod_order_item_pos) c " 这也会引发错误,因为子查询中不允许分组。向我们提供要求和表结构,以帮助您重新构建查询结构。 我刚刚编辑了我的问题,在那里你可以看到适用于 oracle DB 的整个 sql 语句以上是关于sql 语句多层嵌套查询 使用别名 字段无效,如何解决(有图)的主要内容,如果未能解决你的问题,请参考以下文章