所以我尝试编写一个像脚本一样简单的mysql迁移
我的目标是选择participant_id和date以及它们是否相同 - 返回计数
在这个例子中,计数将返回4.
然后我将计数并将其存储在一个变量中以放入另一个表中
基本上我将数据从4行合并为1行,在新表中将有一个计数字段。
我目前的数据。
ID PARTICIPANT_ID DATE
--- -------------- ---------------------
"1" "4" "2015-05-06 21:35:37"
"2" "4" "2015-05-06 21:35:37"
"3" "4" "2015-05-06 21:35:37"
"4" "4" "2015-05-06 21:35:37"
我的目标。
ID PARTICIPANT_ID DATE COUNT
---- -------------- --------------------- -----
"1" "4" "2015-05-06 21:35:37" "4"
我尝试过编写这样的查询:
SELECT ID, PARTICIPANT_ID, DATE FROM mytable
我需要对查询进行哪些更改才能返回指定的结果集?
答案 0 :(得分:1)
这里有一个(有几个替代方案)会返回指定的结果。
SELECT MIN(t.id) AS id
, t.participant_id
, t.date
, COUNT(*) AS `count`
FROM mytable t
GROUP BY t.participant_id, t.date
"技巧"是GROUP BY
子句。那"崩溃"具有所列表达式的公共值的所有行为单行。 COUNT(*)
聚合函数返回"折叠的行数"进入GROUP
。 MIN(t.id)
聚合返回组中行的id
列的最低值。
答案 1 :(得分:1)
INSERT INTO TABLE2
select null, PARTICIPANT_ID, DATE, COUNT(*) from TABLE1
GROUP BY null, PARTICIPANT_ID, DATE
当TABLE2中的ID-Field为AUTOINCREMENT时,他应该将其设置为correkt。
提示:不要将列命名为“date”或“count”,因为这些名称可能是关键字,稍后您会遇到麻烦。
答案 2 :(得分:0)
问题只是第一列id
,但如果需要,您可以MIN(id)
或MAX(id)
。
SELECT participant_id, `date`, CONT(*)
FROM table1
GROUP BY participant_id, `date`
答案 3 :(得分:0)
SELECT participant_id,date,count(*)
FROM yourtable
GROUP BY participant_id, date