MySQL: выберите сумму столбцов, имеющих определенные значения

#mysql #sql

#mysql #sql

Вопрос:

То, что я пытаюсь сделать, это выбрать определенное количество билетов (максимум 2), и каждый человек, у которого сумма количества билетов меньше 3, и действительное поле должно быть != ‘e’

У меня есть этот стол:

ID id_person nr_tickets действительный
1 220 1 s
2 220 1 s
3 330 2 s
4 330 1 e
5 331 1 s
6 220 2 s
7 441 1 s
8 442 2 s
9 443 1 s
10 444 1 s
11 445 2 s

Вот что я сделал:

 SELECT m.id, m.id_person, m.nr_tickets, m.valid FROM table m JOIN table m1 ON m1.id lt;= m.id  WHERE m.nr_tickets gt; 0  GROUP BY m.id HAVING SUM(case when m.valid != 'e' then m1.nr_tickets end) lt;= 10  

Этот запрос дает мне

ID id_person nr_tickets действительный
1 220 1 s
2 220 1 s
3 330 2 s
5 331 1 s
6 220 2 s
7 441 1 s
8 442 2 s

Как вы можете видеть, запрос почти правильный, дело в том, что у человека 220 в результатах сумма билетов больше 2.

Чего я пытаюсь добиться, так это обойти идентификатор 6 и вместо него использовать идентификатор 9

Комментарии:

1. Я думаю, что если вы используете GROUP BY m.id каждый пункт в select предложении, исключение m.id должно быть согласовано. Это не решит вашу проблему, но это шаг к правильному утверждению.

Ответ №1:

 select `id`,`id_person`, sum(`nr_tickets`) as `nr_tickets`, `valid`  from `test` group by `id_person` having sum(`nr_tickets`) lt; 3 and `valid`!="e"  

Выход:

 id id_person nr_tickets valid 5 331 1 s 7 441 1 s 8 442 2 s 9 443 1 s 10 444 1 s 11 445 2 s  

Комментарии:

1. вы почти на месте, что мне нужно сделать, это ограничить общую сумму билетов, чтобы она была меньше или равна указанной сумме

2. Подсказка: столбец идентификатора бесполезен, потому что это одно случайное значение из всех в этом утверждении. Если для valid существуют другие значения, кроме «e» и «s», то для valid возникает та же проблема.