SQL-запрос для определения количества значений в двух столбцах - PullRequest
2 голосов
/ 07 октября 2011

У меня есть таблица SQLite, где у меня есть список сообщений:

to  | from
==========
9999  ME
9999  ME
ME    9999
ME    8888

Результат запроса должен быть в следующем формате:

число (количество совпадающих записей)

9999 (3)
8888 (1)

Как я могу написать запрос, чтобы дать мне этот набор результатов? Я работаю с Android.

Ответы [ 4 ]

2 голосов
/ 07 октября 2011
SELECT value, count(*)  
FROM ( 
   SELECT to as value
   FROM your_table

   UNION ALL

   SELECT "from" as value
   FROM your_table
) t
GROUP BY value

Чтобы отфильтровать нежелательные значения для to и from, используйте условное предложение WHERE (в идеале во внутреннем выделении, чтобы уменьшить количество строк, которые необходимо обработать.

2 голосов
/ 07 октября 2011

Может быть, вы можете сделать что-нибудь, используя это http://www.postgresql.org/docs/current/static/functions-conditional.html

Я думаю, что-то вроде этого (не запускал):

SELECT number, count(number) as `Count` FROM (
  SELECT 
    CASE
      WHEN to = 'ME' THEN from
      ELSE to
    END AS number
    FROM table
  ) GROUP BY number;
1 голос
/ 07 октября 2011
select  value, sum (count) as count, from 
(
    select count(*) as count , "from" as value from your_table 
    group by "from"
   union all 
   select count(*) as count , "to" as value from your_table 
   group by "to" 
) t
group by t.value

Спасибо @a_horse_with_no_name & @razvi!

0 голосов
/ 07 октября 2011

Если вы хотите рассчитывать только вхождения числовых значений, это должно сработать.

Используйте конкатенацию ("||") для формирования нужного результата.

SELECT to_from || ' (' || count(to_from) || ')' FROM (
  SELECT
    CASE 
      WHEN to ~ '^[0-9]+$' THEN to
      WHEN from ~ '^[0-9]+$' THEN from
    END to_from
  FROM
    testing
) a
GROUP BY to_from

Результаты в

 ?column? 
----------
 9999 (3)
 8888 (1)
(2 rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...