我有两个表,id是连接它们的关键。在一个表中有重复的id,状态列是枚举类型。另一个也有id,但它是唯一的,并且有像联合日期这样的列。我必须知道有多少用户按月和年加入,所以我必须按年和月分组。这是我到目前为止的查询。
SELECT year(member.joined) AS year,
month(member.joined) AS month,
count(DISTINCT member.id) AS count
FROM member
WHERE member.id NOT IN
(SELECT internal.worker_id FROM internal)
GROUP BY year(member.joined), month(member.joined);
这给了我这样的结果。
year month count
1982 12 43
1978 11 1
但是,我也必须弄清楚用户类型的数量,这是我想得到的结果。
year month count red green blue
1982 12 43 1 40 2
1978 11 1 0 1 0
所以我尝试通过添加枚举列的名称来编辑查询,这些类型具有这样的类型。
count(DISTINCT member.id) AS count,
count(case c.`types` when 'red' then 1 else 0 end)as 'red',
count(case c.`types` when 'green' then 1 else 0 end)as 'green',
count(case c.`types` when 'blue' then 1 else 0 end)as 'blue'
我收到一条错误消息,指出mysql语法不正确。我尝试了这个查询而没有做count(distint member.id)AS计数,并且它有效。然而,结果只是显示所有内容而不删除重复项,因此数量为' count'和其他像红色,绿色,蓝色不匹配。 我想知道是否有可能获得我想要的结果。
答案 0 :(得分:0)
您是否尝试过(CASE WHEN c.types='red' THEN 1 ELSE 0 END)
语法?它是the docs中列出的第二个版本。此外,确切的查询和错误消息会有所帮助 - 例如,表格' c'这里有联系吗?
答案 1 :(得分:0)
尝试以下查询:
SELECT year(member.joined) AS year,
month(member.joined) AS month,
count(DISTINCT member.id) AS count,
sum(if(member.`types` like 'red', 1, 0)) as 'red',
sum(if(member.`types` like 'green', 1, 0))as 'green',
sum(if(member.types like 'blue', 1, 0))as 'blue'
FROM member
GROUP BY year(member.joined), month(member.joined);
在此上下文中使用group by时,最好使用sum和if()子句