我需要有关MySQL查询的帮助。我们有一个数据库(约1万行),我已经简化了这个问题。
我们有7位卡车司机每天访问9个地点中的3个。每天他们访问的地点恰好是3个不同的地点,每天他们可以访问的地点与前一天不同。以下是代表性表格:
Table: Drivers
id name
10 Abe
11 Bob
12 Cal
13 Deb
14 Eve
15 Fab
16 Guy
Table: Locations
id day address driver.id
1 1 Oak 10
2 1 Elm 10
3 1 4th 10
4 1 Oak 16
5 1 4th 16
6 1 Toy 16
7 1 Toy 11
8 1 5th 11
9 1 Law 11
10 2 Oak 11
11 2 4th 11
12 2 Toy 11
.........
我们拥有一整年的数据,我们需要找出一年中每次访问“路线”的次数(从最大到最小)。
根据我的高中数学,我相信有9!/(6!3!)条路线组合,或总共84条。我想做类似的事情:
获取路由地址为“ Oak”,“ Elm”和“ 4th”的路由计数
然后再次运行 路由地址=“橡树”,“榆树”和“第5”
然后一次又一次,依此类推。然后对路由计数进行降序排列。但是我不想做84次。有办法吗?
答案 0 :(得分:1)
我会看GROUP_CONCAT
SELECT t.day
, t.driver
, GROUP_CONCAT(t.address ORDER BY t.address)
FROM mytable t
GROUP
BY t.day
, t.driver
如果路线上的停靠点有命令,这里还不清楚。顺序会有所不同吗?如何知道顺序是什么?要提出不同的方法,请考虑以下两条路线:
('Oak','Elm','4th')
和('Elm','4th','Oak')
这些是否相等(因为它们是同一组停靠点)还是不同(因为它们处于不同的顺序)?
如果路线上的停靠点序列将其与其他具有相同停靠点(以不同顺序)的路线区分开,则将ORDER BY t.address
替换为ORDER BY t.id
或给出停靠点序列的任何表达式。
一些带有GROUP_CONCAT
的警告:最大长度受group_concat_max_len
和max_allowed_packet
变量设置的限制。另外,逗号用作分隔符...如果我们合并包含逗号的字符串,那么在我们的结果中,我们将无法可靠地区分'a,b'
+ 'c'
和'a'
+ { {1}}
我们可以将该查询用作内联视图,并获得具有相同路由的行数的计数:
'b,c'