MySQL -将两列中相等值的多行视为一行
假设我有一个包含以下数据的表:MySQL -将两列中相等值的多行视为一行,mysql,count,group-by,sum,distinct,Mysql,Count,Group By,Sum,Distinct,假设我有一个包含以下数据的表: Event_ID | Action_ID | Date_of_Action 1 | 1 | 2015-06-25 2 | 1 | 2015-06-25 3 | 1 | 2015-04-10 4 | 2 | 2015-05-11 我需要获取此表中具有特定操作ID的行数并显示它们,但我需要将具有相同操作ID和操作日期的任何行视为1行(或1
Event_ID | Action_ID | Date_of_Action
1 | 1 | 2015-06-25
2 | 1 | 2015-06-25
3 | 1 | 2015-04-10
4 | 2 | 2015-05-11
我需要获取此表中具有特定操作ID的行数并显示它们,但我需要将具有相同操作ID和操作日期的任何行视为1行(或1个计数)
我希望它显示:
Count 1 | Count 2
|
2 | 1
我试过这个:
SELECT
SUM(IF(event.Action_ID = 1, 1, 0)) AS 'Count 1',
SUM(IF(event.Action_ID = 2, 1, 0)) AS 'Count 2',
...
GROUP BY event.Action_ID, event.Date_of_Action
但我的输出如下所示:
Count 1 | Count 2
|
3 | 1
SELECT DISTINCT action_id, date_of_action
FROM myTable;
有什么想法吗?我首先会得到不同的动作id和日期对,如下所示:
Count 1 | Count 2
|
3 | 1
SELECT DISTINCT action_id, date_of_action
FROM myTable;
一旦有了这些,就可以使用条件聚合获得计数:
SELECT SUM(action_id = 1) AS 'count 1', SUM(action_id = 2) AS 'count 2'
FROM(
SELECT DISTINCT action_id, date_of_action
FROM myTable) tmp;
下面是一个示例。我将首先获得不同的操作id和日期对,如下所示:
Count 1 | Count 2
|
3 | 1
SELECT DISTINCT action_id, date_of_action
FROM myTable;
一旦有了这些,就可以使用条件聚合获得计数:
SELECT SUM(action_id = 1) AS 'count 1', SUM(action_id = 2) AS 'count 2'
FROM(
SELECT DISTINCT action_id, date_of_action
FROM myTable) tmp;
下面是一个示例。使用一个子查询,该子查询将具有相同操作ID和日期的行组合在一起:
SELECT
SUM(IF(event.Action_ID = 1, 1, 0)) AS 'Count 1',
SUM(IF(event.Action_ID = 2, 1, 0)) AS 'Count 2',
...
FROM (SELECT DISTINCT Action_ID, Date_of_Action
FROM event) AS event
使用组合具有相同操作ID和日期的行的子查询:
SELECT
SUM(IF(event.Action_ID = 1, 1, 0)) AS 'Count 1',
SUM(IF(event.Action_ID = 2, 1, 0)) AS 'Count 2',
...
FROM (SELECT DISTINCT Action_ID, Date_of_Action
FROM event) AS event
您真的需要将它们分别列在不同的列中,还是仅仅是您需要的数据? 如果你对每一次计数都满意,那么试试看
SELECT Action_ID, count(Event_ID)
FROM myTable
group by Action_ID, Date_of_Action
您真的需要将它们分别列在不同的列中,还是仅仅是您需要的数据? 如果你对每一次计数都满意,那么试试看
SELECT Action_ID, count(Event_ID)
FROM myTable
group by Action_ID, Date_of_Action
工作很好-谢谢!我不知道你可以把这个条件放在一个SUM()中,效果很好-谢谢!我不知道你可以把这个条件放在SUM()中这与他想要的正好相反。它计算动作ID和日期重复的次数,而不是只计算一次。顺便说一句,它应该是
COUNT(*)
,而不是COUNT(Event\u ID)
。这与他想要的正好相反。它计算动作ID和日期重复的次数,而不是只计算一次。顺便说一句,它应该是COUNT(*)
,而不是COUNT(Event\u ID)
。