Как написать запрос if else-if else в MySQL при возврате переменного количества строк

У меня есть три столбца в таблице:

score  status  No.
1,     2,      1
0,     1,      2
0,     0,      1

Мне нужно это, чтобы написать псевдо SQL в стиле C#:

rows = empty;

rows = "SELECT * FROM `table` WHERE score = 1"
if (rows.Count > 0) //at least one row
    return rows;

rows = "SELECT * FROM `table` WHERE status = 2"
if (rows.Count > 1) //more than one row 
    return row with MAX(No.) from rows; //ie MAX(No.) where status = 2

 return rows;

Надеюсь, я понятно объяснил. Короче говоря, выбрать из моей таблицы записи с score = 1, и если такой записи нет, то вернуть запись, где status = 2, а если есть несколько записей со status = 2, то вернуть запись с максимальным значением для No. где status = 2 (если вообще нет записей со status = 2, то вернуть пусто).

Как написать это в одном запросе? Это должно быть хорошим учебным опытом для меня. А то я знаю, что нужно разбивать на более мелкие запросы и запускать каждый из них. А с хранимыми процедурами я сейчас не могу...

Edit: На самом деле в моем запросе будет еще несколько пунктов WHERE, но одинаковых в обоих условиях, поэтому я их опустил. Следовательно, что касается первого условия, то пока будет возвращена только одна запись. То есть SELECT * FROM table WHERE score = 1 вернет только одну строку. И мне нужны / я приму ответы, которые дают такое решение тоже. Но дело в том, что никогда не знаешь, может быть в будущем, с некоторыми изменениями в дизайне, может быть больше строк с score = 1. Вот почему я выбрал records вместо record. Но в идеале бизнес-логика должна иметь все записи с score = 1. На данный момент запись подойдет. Я просто думаю, что запрос будет намного проще, если будет возвращаться только одна строка, и мои товарищи по команде смогут легко усвоить код.

Последнее обновление: Спасибо всем, ребята, вы были очень добры :) Многие ответы сработали хорошо, и выбрать один действительно очень сложно. Мои выводы по ответам:

  1. Ответы, которые работали всегда: @GordonLinoff's, @ZaneBiens's, @ZaneBien's another, @Scen's, @JulienCh. 's (последние 3 по сути одинаковые, но я не совсем понимаю, как они работают :))

  2. Ответы, которые работали только тогда, когда первое условие score = 1 возвращало только один ряд: @HannoBinder's, @ShlomiNoach's, @DaniellePaquette-Harvey's. На данный момент я буду придерживаться варианта @Danielle (который чертовски прост) и позже вернусь, если возникнет необходимость иметь более одного ряда)

  3. Остальные ответы я не смог проверить, так как они были либо не очень конкретными, либо не связанными с MySQL.

  4. Ответ @MatthewPK's не уместен в данном контексте.

Присудить вознаграждение и принять ответ сложно при таком количестве правильных ответов. Я выбрал этот, так как посчитал его более эффективным и читаемым, но я приму ответ @Scen'а за простоту.

5
задан Community 23 May 2017 в 12:23
поделиться