我有表格图片,其中包含属性pictureId,albumName,isCover图片。
+--------+-----------+----------+
| id | albumName | coverPic |
+--------+-----------+----------+
| String | String | Boolean |
+--------+-----------+----------+
我需要编写查询以获取每张专辑中的图片数量,并获得每张专辑封面照片的ID。我写了这个查询,我得到了很多图片,但我不知道如何获得每张专辑封面图片的ID。
SELECT ALBUM as album, count(ALBUM) as picsInAlbum, PICTURE_ID as pictureId
FROM PICTURES
group by ALBUM, PICTURE_ID
例如:
+--------+-----------+----------+
| id | albumName |isCover |
+--------+-----------+----------+
| 1 | test | true |
+--------+-----------+----------+
+--------+-----------+----------+
| 2 | test | false |
+--------+-----------+----------+
+--------+-----------+----------+
| 3 | test1 | true |
+--------+-----------+----------+
+--------+-----------+----------+
| 4 | test1 | false |
+--------+-----------+----------+
+--------+-----------+----------+
| 5 | test2 | true |
+--------+-----------+----------+
+--------+-----------+----------+
| 6 | test2 | false |
+--------+-----------+----------+
作为查询结果我需要这个。
+--------+-----------+----------+
| ALBUM |PICSINALBUM|coverPicId
+--------+-----------+----------+
+--------+-----------+----------+
| test | 2 | 1 |
+--------+-----------+----------+
+--------+-----------+----------+
| test1 | 2 | 3 |
+--------+-----------+----------+
+--------+-----------+----------+
| test2 | 2 | 5 |
+--------+-----------+----------+
答案 0 :(得分:2)
条件聚合。对每一行进行测试,以确定此行是否为专辑的“封面图片”。如果是,则返回picture_id,否则返回NULL。然后使用聚合函数来选择非NULL值。
这样的事情:
SELECT p.album AS album
, COUNT(p.album) AS picsInAlbum
, MAX(IF(p.isCover=1,p.picture_id,NULL)) AS pictureId
FROM `PICTURES` p
GROUP
BY p.album
注意:MySQL IF()
功能可以用更便携的ANSI标准等效替换
, MAX(CASE WHEN p.isCover = 1 THEN p.picture_id ELSE NULL END) AS pictureId
注意:建议使用小写表格名称。
...最好采用一致的约定,例如始终使用小写名称创建和引用数据库和表。建议使用此约定以实现最大的便携性和易用性。
https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html