[英]Find min value in column by grouping more than one column in sql
+----+-------+-----------------------------+-------------------------+-------------------+-------------+
| Id | grade | shot_name | submitted_by_supervisor | version_submitted | submit_type |
+----+-------+-----------------------------+-------------------------+-------------------+-------------+
| 27 | A | elx_reel01_scn1020_shot1720 | Salil Devji | 33 | Fresh |
| 27 | A | elx_reel01_scn1020_shot1720 | Deepali | 34 | Fresh |
| 37 | A | elx_reel01_scn1030_shot3480 | Salil Devji | 15 | Fresh |
| 37 | A | elx_reel01_scn1030_shot3480 | Salil Devji | 20 | Fresh |
| 7 | B | elx_reel01_scn1010_shot1030 | Darshan | 4 | Fresh |
| 7 | B | elx_reel01_scn1010_shot1030 | Varion | 6 | Fresh |
| 17 | B | elx_reel01_scn1010_shot1140 | Varion | 17 | Fresh |
| 17 | B | elx_reel01_scn1010_shot1140 | Varion | 14 | Fresh |
+----+-------+-----------------------------+-------------------------+-------------------+-------------+
I have column (submit_type) inserting new column in that value are set by CASE condition here is my sql query:我有在该值中插入新列的列(submit_type)是由 CASE 条件设置的,这是我的 sql 查询:
SELECT s.shot_id,
s.shot_name ,
isn.reviewer AS 'submitted_by_supervisor',
isn.version AS 'version_submitted',
isn.grade AS 'grade',
CASE
WHEN isn.version = Min(isn.version) THEN 'FRESH'
ELSE 'Once Submitted'
end AS 'submit_type'
FROM viewd_elx.india_supe_note isn
JOIN viewd_elx.shot s
ON s.shot_id = isn.shot_id
JOIN viewd_elx.team t
ON isn.shot_id = t.shot_id
JOIN viewd_elx.viewd_team vt
ON isn.shot_id = vt.shot_id
WHERE isn.promoted='Yes'
AND isn.grade IN ('A',
'B')
GROUP BY isn.grade,
s.shot_id,
isn.version;
mentioned query gives 'Fresh' value in all field in (submit_type) column.提到的查询在 (submit_type) 列的所有字段中给出“新鲜”值。 which is not correct.这是不正确的。
What I need exactly is, I am grouping column and finding MIN(value) of column,我真正需要的是,我正在对列进行分组并找到列的 MIN(value),
Work Flow: - grade A => group (shot_name) => min(version_submited) => set 'Fresh' else 'Once submitted' in (submit_type)工作流程:- A 级 => 组 (shot_name) => min(version_submited) => 在 (submit_type) 中设置 'Fresh' else 'Once submit'
In Grade 'A' have same shot_name, grouping this (shot_name) and then finding min(version_submited) if min value found then set 'fresh' else set 'once submitted' value in (submit_type) column.在“A”级中具有相同的shot_name,将其分组(shot_name),然后找到min(version_submited)如果找到最小值然后设置“新鲜”,否则在(submit_type)列中设置“一旦提交”值。 Also for Grade B like Grade A.也适用于 B 级,如 A 级。
I need result like this =>我需要这样的结果=>
+----+-------+-----------------------------+-------------------------+-------------------+----------------+
| Id | grade | shot_name | submitted_by_supervisor | version_submitted | submit_type |
+----+-------+-----------------------------+-------------------------+-------------------+----------------+
| 27 | A | elx_reel01_scn1020_shot1720 | Salil Devji | 33 | Fresh |
| 27 | A | elx_reel01_scn1020_shot1720 | Deepali | 34 | Once Submitted |
| 37 | A | elx_reel01_scn1030_shot3480 | Salil Devji | 15 | Fresh |
| 37 | A | elx_reel01_scn1030_shot3480 | Salil Devji | 20 | Once Submitted |
| 7 | B | elx_reel01_scn1010_shot1030 | Darshan | 4 | Fresh |
| 7 | B | elx_reel01_scn1010_shot1030 | Varion | 6 | Once Submitted |
| 17 | B | elx_reel01_scn1010_shot1140 | Varion | 17 | Once Submitted |
| 17 | B | elx_reel01_scn1010_shot1140 | Varion | 14 | Fresh |
+----+-------+-----------------------------+-------------------------+-------------------+----------------+
The issue here is that you are grouping by on isn.version
field as well, and trying to compute the minimum of the same field in that group.这里的问题是您也在isn.version
字段上进行分组,并尝试计算该组中同一字段的最小值。 It will simply return the same value, and that is why all are coming as "Fresh".它只会返回相同的值,这就是为什么所有都以“新鲜”的形式出现。 You will need to determine the minimum isn.version
value for a group of (grade, shot_id)
separately in a subquery ( Derived Table ), and then use that to check whether minimum or not.您需要在子查询(派生表)中分别确定一组(grade, shot_id)
的最小isn.version
值,然后使用它来检查是否最小。
SELECT s.shot_id,
s.shot_name ,
isn.reviewer AS submitted_by_supervisor,
isn.version AS version_submitted,
isn.grade AS grade,
CASE
WHEN isn.version = dt.min_version THEN 'FRESH'
ELSE 'Once Submitted'
END AS 'submit_type'
FROM viewd_elx.india_supe_note isn
JOIN viewd_elx.shot s
ON s.shot_id = isn.shot_id
JOIN viewd_elx.team t
ON isn.shot_id = t.shot_id
JOIN viewd_elx.viewd_team vt
ON isn.shot_id = vt.shot_id
JOIN (
SELECT grade,
shot_id,
MIN(version) AS min_version
FROM viewd_elx.india_supe_note
WHERE promoted = 'YES'
AND grade IN ('A', 'B')
GROUP BY grade,
shot_id
) AS dt
ON dt.grade = isn.grade
AND dt.shot_id = isn.shot_id
WHERE isn.promoted='Yes'
AND isn.grade IN ('A','B')
GROUP BY s.shot_id,
s.shot_name,
isn.reviewer,
isn.version,
isn.grade,
dt.min_version
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.