SQL-поиск, поиск a | b | c | d в таблице и возвращение результатов, упорядоченных по количеству элементов в записи - PullRequest
0 голосов
/ 24 августа 2010

вопрос: есть две таблицы - ДНИ (имя), ДЕЙСТВИЯ (имя_дня, имя)

записи для ДНЕЙ:

Sunday, Monday, Wednesday

записи для ДЕЙСТВИЙ:

{eat,sunday},
{sleep,sunday},
{write,sunday},
{drink,sunday}

{eat,wednesday},
{sleep,wednesday},
{write,wednesday},

{eat,monday},
{sleep,monday},

Я хочу найти в ДЕЙСТВИЯХ те дни, которые имеют наибольшее количество занавесных действий, и возвращать результаты, упорядоченные от более высокого к более низкому.Значение: если я ищу «есть», «спать», «писать» и «пить» - результат будет: sunday, wednesday, monday.

Ответы [ 3 ]

2 голосов
/ 24 августа 2010

Вы ищете это ...

SELECT day_name, number FROM
(
  SELECT day_name, COUNT(*) 
  FROM ACTIONS 
  WHERE name in ('eat', 'sleep', 'write') 
  GROUP BY day_name
) AS Test
ORDER BY number DESC
2 голосов
/ 24 августа 2010
SELECT d.name
    FROM ACTIONS a JOIN DAYS d ON a.day_name=d.name
        WHERE a.name IN ('eat', 'sleep', 'write', 'drink')  -- Your search
            GROUP BY a.name
                ORDER BY COUNT(*) DESC;
1 голос
/ 24 августа 2010
select 
    day_name, count(day_name) qty
from
    actions
where 
    name in ('eat', 'sleep', 'write', 'drink')
group by day_name
order by qty desc
...