Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL -将两列中相等值的多行视为一行_Mysql_Count_Group By_Sum_Distinct - Fatal编程技术网

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)