MySQL分组查询如何获取同media_id下非空字段值?
解决分组查询中取非空字段值的问题
因为同一media_id对应的poster、url、page字段值完全一致,且至少有一行存在非空值,你可以用**MAX()或MIN()**这类聚合函数来获取这些字段的非空值——它们会自动忽略NULL,返回该分组下存在的有效值,不需要用WHERE IS NOT NULL过滤。
修改后的查询语句如下:
SELECT media_id, title, MAX(poster) AS poster, MAX(url) AS url, MAX(page) AS page, SUM(c_play) AS total_play, SUM(c_time) AS total_time, SUM(c_download) AS total_download FROM {$statistics_table} GROUP BY media_id, title ORDER BY $order $dir
说明
- 用
MAX()包裹poster、url、page后,分组时会自动提取该media_id下的非空值(同一分组内这些字段值一致,MAX和MIN结果相同,选哪个都可以)。 - 统计求和的逻辑不受影响,依然能得到正确的
total_play、total_time和total_download。
修改后单条结果示例:
{ "media_id": "41", "title": "Beach sunset", "poster": "https://example.com/poster.jpg", "url": "https://example.com/video.mp4", "page": "/beach-sunset", "total_play": "5", "total_time": "42", "total_download": "2" }
内容的提问来源于stack exchange,提问作者Toniq
相关产品推荐
相关产品推荐

