0

我有 2 张桌子:

  1. Pet_table,其中包含一个 ID 号和宠物类型(例如“猫”)
  2. Size_table, 其中包含一个 ID 号和大小 ('S','M','L')

我想打印出配对出现的频率,包括零。例如:

id   Pet_Type         id    SIZE
   1    'cat'            1     'S'
   2    'cat'            2     'S'
   3    'cat'            3     'L'
   4    'dog'            4     'M'
   5    'snake'          5     'S'
   6    'dog'            6     'M'

从这个例子中,我想要:

cat   | S | 2 
cat   | M | 0 
cat   | L | 1
dog   | S | 0 
dog   | M | 2 
dog   | L | 0
snake | S | 1
snake | M | 0
snake | L | 0

我几乎有了答案,但我似乎无法打印出零。

SELECT pet_type, size, COUNT(*) FROM pet_table LEFT JOIN size_table
ON pet_table.id=size_table.id GROUP BY pet_type,size;

给我:

cat   | S | 2 
cat   | L | 1
dog   | M | 2 
snake | S | 1

我无能为力,所以任何帮助将不胜感激。如果这很重要,请在 sqlite3 中执行此操作。

4

2 回答 2

2

您需要一个驱动程序表来获取所有可能的宠物和大小组合,然后将其用于连接:

SELECT pet_type, size, COUNT(st.id)
FROM (select distinct pet_type from pet_table) p cross join
     (select distinct size from size_table) s LEFT JOIN
     pet_table pt
     on pt.pet_type = p.pet_type left join
     size_table st
     ON pt.id=st.id and st.size = s.size
GROUP BY p.pet_type, s.size;
于 2013-08-16T17:12:53.143 回答
0

Try this:

select t1.pet_type, t1.size, ifnull(t2.[count], 0) [count]
from (
    select distinct p.pet_type, t.size
    from pet_table p
    cross join (select distinct size from size_table) t) t1
left join (
    SELECT p.pet_type, s.size, COUNT(*) [count]
    FROM pet_table p
    LEFT JOIN size_table s ON p.id=s.id 
    GROUP BY p.pet_type, s.size) t2 on t1.pet_type = t2.pet_type and t1.size = t2.size
order by t1.pet_type, t1.size

SQLFiddle

于 2013-08-16T17:29:03.580 回答