Вопрос о присоединении к SQL - PullRequest
0 голосов
/ 25 июля 2011

У меня есть 2 таблицы, подобные этой:

category_table:

data_id  cat_id
      1       1
      1       2
      3       1
      3       3
      4       5
      4       6

data_table:

data_id  example_data
      1             x
      2             y
      3             m
      4             i

мне нужно посчитать количество записей data_table, которыесгруппированы с категорией 1 И 2

Ответы [ 4 ]

2 голосов
/ 25 июля 2011

Редактировать: Перечитав свой вопрос, это то, что вы ищете? Количество элементов из data_table, где существует запись в category_table для категорий 1 и 2?

select
    count(*)
from
    data_table d
    inner join category_table c1
        on  d.data_id = c1.data_id
    inner join category_table c2
        on  d.data_id = c2.data_id
where
    c1.cat_id = 1
    c2.cat_id = 2

(старый ответ под этим ...)

Если вам нужен прямой подсчет всех записей:

select
    count(*)
from
    data_table d
    inner join category_table c
        on  d.data_id = c.data_id
where
    c.cat_id in (1, 2)

Если вы хотите подсчитать для каждой категории:

select
    c.cat_id, count(*)
from
    data_table d
    inner join category_table c
        on  d.data_id = c.data_id
where
    c.cat_id in (1, 2)
group by
    c.cat_id
0 голосов
/ 25 июля 2011

Если вы хотите посчитать строки в data_table, чьи data_id связаны (в category_table) с cat_id 1 , а также с cat_id 2 ...

select count(*) from data_table
where data_id in 
 (select data_id from category_table as ct1 where ct1.cat_id=1 and exists
  (select * from category_table as ct2 where ct2.cat_id=1 and ct2.data_id=ct1.data_id)
  )

В вашем случае, это вернет значение 1 для первой строки data_table (1: x), так как этот data_id (1) является единственным со строкой в ​​category_table для который cat_id = 1, а также строка, для которой cat_id = 2.

0 голосов
/ 25 июля 2011
 select Cat_id,COUNT(*) [number of data_table] from data_table
 inner join category_table on category_table.data_id = data_table.data_id 
 group by Cat_id

ИЛИ

  select Cat_id,COUNT(*) [number of data_table] from category_table
  group by Cat_id
0 голосов
/ 25 июля 2011
SELECT COUNT(CAT_ID) 
FROM CATEGORY_TABLE 
JOIN DATA_TABLE ON CATEGORY_TABLE.CAT_ID=DATA_TABLE.DATA_ID 
WHERE CATEGORY_TABLE.CAT_ID IN (1,2) 
...