簡體   English   中英

按出現次數對兩列進行分組,並在MYSQL中按時間排序

[英]Group two columns by occurrence and sort by time in MYSQL

我正在使用一個表,其中包含將由Laser Cutter處理的上載文件列表。

為了提高效率,我需要按照發生多少相同組合的順序列出具有相同材料顏色的文件。 然后在發送時訂購。

這是一個非常簡化的表示例:

文件表示例

從上面的示例表中我想實現以下結果:

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;

雖然這似乎幾乎正確地排序,但它只返回每個材質/顏色組合的單行。

值得注意的是,顏色列可以為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 ...當兩個組合具有相同的頻率時。

您可以嘗試在sql select中創建計數列,然后按這些計數進行排序

select count(material) over partition by material) as materialCount
       , count(colour) over partition by colour) as colourCount
       , ..... other columns
from   propellor.pro_files
order by materialCount desc, colourcount desc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM