Я полагаю, вы могли бы сделать что-то вроде: -
WITH
drawNumber AS (SELECT 2 /*<<<<<<<<<< The drawNo */),
winningNumbers(wn) AS
(
SELECT n1||','||n2||','||n3||','||n4||','||n5||','||n6 FROM Draw JOIN Combination ON Draw.winCombinationNo = Combination.combinationNo WHERE Draw.drawNo = (SELECT * FROM drawNumber)
)
SELECT
Ticket.ticketNo AS TicketNo,
Line.LineId,
n1||' '||n2||' '||n3||' '||n4||' '||n5||' '||n6 AS Entry,
(SELECT * FROM winningNumbers) AS WinningNumbers,
(instr((SELECT ','||wn||',' FROM winningNumbers),','||n1||',') > 0) +
(instr((SELECT ','||wn||',' FROM winningNumbers),','||n2||',') > 0) +
(instr((SELECT ','||wn||',' FROM winningNumbers),','||n3||',') > 0) +
(instr((SELECT ','||wn||',' FROM winningNumbers),','||n4||',') > 0) +
(instr((SELECT ','||wn||',' FROM winningNumbers),','||n5||',') > 0) +
(instr((SELECT ','||wn||',' FROM winningNumbers),','||n6||',') > 0)
AS score
FROM Line
JOIN Combination ON Line.CombinationNo = Combination.combinationNo
JOIN Ticket ON Ticket.ticketNo = Line.TicketNo
WHERE score > 0 AND DrawNo = (SELECT * FROM drawNumber)
ORDER BY score DESC
LIMIT 6
;
Это приведет к таким результатам: -
- Обратите внимание, что из-за недостатка предоставленной информации определение выигрыша может отличаться от ожидаемого.
Вышеуказанное основано на случайной генерации до 100000 комбинаций (уменьшается при удалениикомбинации одинаковых чисел) и генерирование 20000 билетов, каждая из которых состоит из одной линии с четырьмя розыгрышами (номер 1-4 в розыгрыше).
Если учитывать количество набранных очков, то это будет простовопрос группировки по баллам и извлечения суммы баллов.