SQL优化:查找vod_name相同且vod_year相差不大于1的数据
SQL优化:查找vod_name相同且vod_year相差不大于1的数据
问题描述:
在mac_vod表中,需要查找所有vod_name相同的数据,并筛选出vod_year相差不大于1的数据内容。
原始SQL语句:
SELECT vod_id, type_id, vod_name, vod_year, vod_time
FROM mac_vod
WHERE (vod_name, vod_year) IN (
SELECT vod_name, vod_year
FROM mac_vod
WHERE type_id IN (1,6,7,8,9,10,11,12,20,21,22,23,24,25,26)
GROUP BY vod_name, vod_year
HAVING COUNT(*) > 1
)
ORDER BY vod_name ASC, vod_time DESC
LIMIT 30
优化后的SQL语句:
SELECT vod_id, type_id, vod_name, vod_year, vod_time
FROM mac_vod
WHERE vod_name IN (
SELECT vod_name
FROM mac_vod
WHERE type_id IN (1,6,7,8,9,10,11,12,20,21,22,23,24,25,26)
GROUP BY vod_name
HAVING MAX(vod_year) - MIN(vod_year) <= 1
)
ORDER BY vod_name ASC, vod_time DESC
LIMIT 30
优化思路:
原始SQL语句使用子查询和COUNT函数来筛选vod_name和vod_year相同的数据,效率较低。
优化后的SQL语句使用MAX函数和MIN函数来计算vod_year的最大值和最小值,并使用HAVING子句判断最大值和最小值之差是否小于等于1,从而筛选出符合条件的数据。
优点:
- 使用MAX函数和MIN函数计算最大值和最小值,提高了查询效率。
- 使用HAVING子句判断最大值和最小值之差,简化了代码逻辑。
注意事项:
- type_id的取值范围需要根据实际情况进行调整。
- LIMIT 30表示只返回前30条记录,可以根据实际需求调整。
总结:
本文介绍了如何优化SQL语句,在mac_vod表中查找所有vod_name相同的数据,并筛选出vod_year相差不大于1的数据内容。优化后的SQL语句使用MAX函数和MIN函数来提高查询效率,并简化了代码逻辑。
原文地址: https://www.cveoy.top/t/topic/qnMs 著作权归作者所有。请勿转载和采集!