Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询:分组方式-获取特定行(不总是第一行) 带有示例数据的表“图像”: MySQL查询:_Mysql_Sql_Database_Group By - Fatal编程技术网

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