【发布时间】:2018-08-12 01:23:17
【问题描述】:
我目前正在执行一个查询,该查询在选择中包含两个选择。我想对返回的结果进行分组以进行计数(进而创建饼图)
我尝试查询的系统包含一张图片表。每个图像可能有零位或多位元数据。可用的元数据可能因图像而异,因此它由单独的表提供,而不是作为图像表的一部分的列。
所以表结构是:
Image {
image_id (PK)
}
ImageMetaDataKey {
metadata_key_id (PK),
key
}
ImageMetaDataValue {
metadata_value_id (PK),
value
}
ImageMetaData {
image_id (FK - Image.image_id),
metadata_key_id (FK - ImageMetaDataKey.metadata_key_id ),
metadata_value_id (FK - ImageMetaDataValue.metadata_value_id )
}
我当前的SQL语句是:
SELECT i_o.image_id, (SELECT imdv.value
FROM Image i, ImageMetaDataValue imdv, ImageMetaDataKey imdk, ImageMetaData imd
WHERE imdk.metadata_key_id = imd.metadata_key_id
AND imd.metadata_value_id =imdv.metadata_value_id
AND (imdk.key='Camera Model')
AND i.image_id=imd.image_id
) as Camera, (SELECT imdv.value
FROM Image i, ImageMetaDataValue imdv, ImageMetaDataKey imdk, ImageMetaData imd
WHERE imdk.metadata_key_id = imd.metadata_key_id
AND imd.metadata_value_id =imdv.metadata_value_id
AND (imdk.key='Lens Model')
AND i.image_id=imd.image_id
) as Lens
FROM Image i_o
GROUP BY i_o.image_id;
返回:
+----------+-----------------------+-------------------------------------+
| image_id | Camera | Lens |
+----------+-----------------------+-------------------------------------+
| 11 | Canon EOS 450D | EF-S17-55mm f/2.8 IS USM |
| 15 | Canon EOS 450D | EF-S17-55mm f/2.8 IS USM |
| 24 | Canon EOS 450D | EF-S17-55mm f/2.8 IS USM |
| 28 | Canon EOS 450D | EF16-35mm f/2.8L USM |
| 29 | Canon EOS 450D | EF16-35mm f/2.8L USM |
| 34 | Canon EOS 450D | EF-S18-55mm f/3.5-5.6 IS |
| 35 | Canon EOS 450D | EF-S18-55mm f/3.5-5.6 IS |
| 37 | Canon EOS 450D | EF-S17-55mm f/2.8 IS USM |
| 43 | Canon EOS 7D | EF-S17-55mm f/2.8 IS USM |
| 48 | Canon EOS 450D | EF-S17-55mm f/2.8 IS USM |
| 49 | Canon EOS 450D | EF70-200mm f/2.8L USM |
| 50 | Canon EOS 450D | EF70-200mm f/2.8L USM |
+----------+-----------------------+-------------------------------------+
理想情况下我想运行类似的东西:
SELECT COUNT(i_o.image_id) as 'Count ', (SELECT imdv.value
FROM Image i, ImageMetaDataValue imdv, ImageMetaDataKey imdk, ImageMetaData imd
WHERE imdk.metadata_key_id = imd.metadata_key_id
AND imd.metadata_value_id =imdv.metadata_value_id
AND (imdk.key='Camera Model')
AND i.image_id=imd.image_id
) as Camera, (SELECT imdv.value
FROM Image i, ImageMetaDataValue imdv, ImageMetaDataKey imdk, ImageMetaData imd
WHERE imdk.metadata_key_id = imd.metadata_key_id
AND imd.metadata_value_id =imdv.metadata_value_id
AND (imdk.key='Lens Model')
AND i.image_id=imd.image_id
) as Lens
FROM Image i_o
GROUP BY i_o.image_id, Camera, Lens;
会返回:
+----------+-----------------------+-------------------------------------+
| Count | Camera | Lens |
+----------+-----------------------+-------------------------------------+
| 5 | Canon EOS 450D | EF-S17-55mm f/2.8 IS USM |
| 2 | Canon EOS 450D | EF16-35mm f/2.8L USM |
| 2 | Canon EOS 450D | EF-S18-55mm f/3.5-5.6 IS |
| 1 | Canon EOS 7D | EF-S17-55mm f/2.8 IS USM |
| 2 | Canon EOS 450D | EF70-200mm f/2.8L USM |
+----------+-----------------------+-------------------------------------+
【问题讨论】: