如果没有获得随机的行,请选择符合条件的所有行

时间:2017-06-28 12:57:59

标签: sql select mysql-5.6

+----+---------------+--------------------+------------+----------+-----------------+
| id | restaurant_id |      filename      | is_profile | priority | show_in_profile |
+----+---------------+--------------------+------------+----------+-----------------+
| 40 |            20 | 1320849687_390.jpg |            |          |               1 |
| 60 |            24 | 1320853501_121.png |          1 |          |               1 |
| 61 |            24 | 1320853504_847.png |            |          |               1 |
| 62 |            24 | 1320853505_732.png |            |          |               1 |
| 63 |            24 | 1320853505_865.png |            |          |               1 |
| 64 |            29 | 1320854617_311.png |          1 |          |               1 |
| 65 |            29 | 1320854617_669.png |            |          |               1 |
| 66 |            29 | 1320854618_636.png |            |          |               1 |
| 67 |            29 | 1320854619_791.png |            |          |               1 |
| 74 |           154 | 1320922653_259.png |            |          |               1 |
| 76 |           154 | 1320922656_332.png |            |          |               1 |
| 77 |           154 | 1320922657_106.png |            |          |               1 |
| 84 |           130 | 1321269380_960.jpg |          1 |          |               1 |
| 85 |           130 | 1321269383_555.jpg |            |          |               1 |
| 86 |           130 | 1321269384_251.jpg |            |          |               1 |
| 89 |            28 | 1321269714_303.jpg |            |          |               1 |
| 90 |            28 | 1321269716_938.jpg |          1 |          |               1 |
| 91 |            28 | 1321269717_147.jpg |            |          |               1 |
| 92 |            28 | 1321269717_774.jpg |            |          |               1 |
| 93 |            28 | 1321269717_250.jpg |            |          |               1 |
| 94 |            28 | 1321269718_964.jpg |            |          |               1 |
| 95 |            28 | 1321269719_830.jpg |            |          |               1 |
| 96 |            43 | 1321270013_629.jpg |          1 |          |               1 |
+----+---------------+--------------------+------------+----------+-----------------+

我有这个表,我想为给定的餐馆ID列表选择文件名。 例如24,29,154:

+----+---------------
|     filename      |
+----+---------------
1320853501_121.png (has is_profile 1)
1320854617_311.png (has is_profile 1)
1320922653_259.png (chosen as profile picture because restaurant doesn't have a profile pic but has pictures)

我尝试了分组和案例陈述,但我无处可去。如果你使用分组,它应该是一个完整的分组。

1 个答案:

答案 0 :(得分:2)

你可以通过聚合和一些逻辑来做到这一点:

select restaurant_id,
       coalesce(max(case when is_profile = 1 then filename end),
                max(filename)
               ) as filename
from t
where restaurant_id in (24, 29, 154)
group by restaurant_id;

首先查找/ a个人资料文件名。接下来只选择任意一个。