MySQL查询:分组方式-获取特定行(不总是第一行) 带有示例数据的表“图像”: MySQL查询:
查询为每个唯一组合返回一行。但是,您如何知道它选择了哪一行的MySQL查询:分组方式-获取特定行(不总是第一行) 带有示例数据的表“图像”: MySQL查询:,mysql,sql,database,group-by,Mysql,Sql,Database,Group By,查询为每个唯一组合返回一行。但是,您如何知道它选择了哪一行的id?例如,sort=0的图像是相册的封面图像。此图像的文件路径包含id。那么,在sort=0的情况下,如何始终获取行的id呢 我尝试了MIN(sort),它总是在sort列中返回0,但是该列的id不正确按排序排序仅对结果排序。。。也不是解决办法 非常感谢您的帮助!提前非常感谢 编辑:希望这有助于更好地理解: 例如,查询给出以下结果: id | sort | count 1 1 3 4 0 2 6
id
?例如,sort=0的图像是相册的封面图像。此图像的文件路径包含id
。那么,在sort=0
的情况下,如何始终获取行的id呢
我尝试了MIN(sort)
,它总是在sort
列中返回0
,但是该列的id
不正确<代码>按排序排序
仅对结果排序。。。也不是解决办法
非常感谢您的帮助!提前非常感谢
编辑:希望这有助于更好地理解:
例如,查询给出以下结果:
id | sort | count
1 1 3
4 0 2
6 0 1
但是,如果sort
的值为0
,如何始终获取该特定行?例如
id | sort | count
3 0 3
4 0 2
6 0 1
首先,过滤封面图像(
其中sort=0
),然后,简单地计算该相册id
的所有图像
SELECT id,
sort,
(SELECT COUNT(*)
FROM images t
WHERE t.album_id = i.album_id) AS count
FROM images i
WHERE user_id = 15
AND sort = 0
有一种方法可以在没有相关子查询的情况下执行此操作:
SELECT id, sort, isum.cnt
FROM images i join
(select i.album_id, count(*) as cnt
from images
) isum
on i.album_id = isum.album_id
WHERE user_id = 15 and
sort = 0
我通常喜欢在“from”子句中列出我的所有表格。但是,当相册id上有索引时,某些数据库会比此表单更好地优化相关子查询
另外,我将第三个字段从“count”重命名为“cnt”。用SQL保留字命名列是一个非常非常糟糕的主意,除非您真的必须这样做
最后,大多数其他SQL语言都支持窗口函数。因此,如果您更改数据库,您可以执行以下操作
select id, sort, count(*) over (partition by album_id)
from images
where user_id = 15 and
sort = 0
你真正想要实现的是什么?也许您可以插入两个类似的表格,显示当前和期望的结果?@AndrewLeach:thx,请查看更新后的问题以及当前输出和期望的输出。希望现在更清楚…其他SQL引擎会拒绝此查询,因为存在逻辑问题-
sort
列未包含在聚合函数或GROUP BY
子句中。。。这只是MySQL的MySQL。请参阅和链接的材料,以及。@DCoder:谢谢您的链接!是的,这很有道理。实际上,我是在使用SELECT
中的sort
列来显示sort
的输出,在我的情况下,如果它总是0
,那么选择它就没有意义了。但这是一个很好的观点和thx再次为这!好的,谢谢你,乔!所以只有一个选择而没有子选择似乎没有解决方案,我只是想知道是真的没有,还是我太盲目了…:)谢谢你的回答!
SELECT id, sort, isum.cnt
FROM images i join
(select i.album_id, count(*) as cnt
from images
) isum
on i.album_id = isum.album_id
WHERE user_id = 15 and
sort = 0
select id, sort, count(*) over (partition by album_id)
from images
where user_id = 15 and
sort = 0