我正在使用一个表,其中包含将由激光切割机处理的上载文件的列表.
为了提高效率,我需要列出具有相同材质和颜色的文件,以显示相同组合的数量.然后在发送时订购.
这是一个非常简化的表格示例:
从上面的示例表中,我想要获得以下结果:
6 File Number 6 Plastic Red 9am
4 File Number 4 Plastic Red 10am
5 File Number 5 Plastic Red 10:30am
1 File Number 1 Card Blue 9am
2 File Number 2 Card Blue 9:30am
7 File Number 7 Plastic Purple 8am
3 File Number 3 Card Green 9am
因此,在材料和颜色都出现最多的地方,相应的行位于顶部,而在该行中,最早的文件位于顶部.
如您所见,红色塑料最常出现在顶部.单个文件仅按时间排序,如文件7和3所示.
理想情况下,我想在一个MYSQL查询中执行此操作,但鉴于其复杂性,我不确定是否可能.也许存储结果并遍历数组?
我几乎可以通过以下查询实现此目的:
SELECT *
FROM propellor.pro_files
GROUP BY material, colour
ORDER BY count(*) DESC,
material DESC,
colour DESC,
sent DESC;
尽管似乎订购的顺序几乎正确,但每种材料/颜色组合仅返回单行.
值得注意的是color列可以为null.
有关如何将它们分组的想法,下面是它在实践中的外观:
更新:材料/颜色组现在已正确排序,但是当我需要反过来的时候,单个文件从最新到最旧的顺序被排序,我尝试使用已发送的ASC / DESC进行播放,但它只影响组中的文件.
更新2:这是我当前的完整MYSQL查询:
SELECT *
FROM propellor.pro_files
INNER JOIN propellor.pro_users ON propellor.pro_files.userid=propellor.pro_users.userid
INNER JOIN (
SELECT material, colour, count(*) AS occ
FROM propellor.pro_files
GROUP BY material, colour
)
AS mcCounts
USING (material, colour)
WHERE status =1 AND laser=1
ORDER BY mcCounts.occ DESC,
material,
colour,
propellor.pro_files.timesent ASC
;
解决方法:
您可以单独计算计数,尽管可以在单个查询中完成所有计算;这应该做到这一点:
SELECT pf.*
FROM propellor.pro_files AS pf
INNER JOIN (
SELECT material, colour, count(*) AS occ
FROM propellor.pro_files
GROUP BY material, colour
) AS mcCounts USING (material, colour)
ORDER BY mcCounts.occ DESC
, material, colour
, pf.sent DESC
;
编辑:当两个组合具有相同的频率时,将材料,颜色添加到ORDER BY….
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。