2015-04-25 118 views
0

我知道其他職位談論這一點,但我還沒有能夠適用於這種情況。MySQL:計數,然後按總數排序

這是我到目前爲止。

SELECT * 
FROM ccParts, ccChild, ccFamily 
WHERE parGC = '26' AND 
    parChild = chiId AND 
    chiFamily = famId 
ORDER BY famName, chiName 

我需要做的是查看結果中具有相同ccFamily的ccParts的總數。然後,按總數排序。

+0

你能分享一些樣本數據和你想要的結果嗎? – Mureinik

+0

首先,你不應該在三個不同的表上使用SELECT *,而只選擇你需要的字段。那麼,你能告訴我們表格的結構嗎? –

回答

0

它看起來這是接近你想要什麼:

SELECT f.famId, f.famName, pc.parCount 
FROM (
    SELECT c.chiFamily AS famId, count(*) AS parCount 
    FROM 
     ccParts p 
     JOIN ccChild c ON p.parChild = c.chiId 
    WHERE p.parGC ='26' 
    GROUP BY c.chiFamily 
) pc 
    JOIN ccFamily f ON f.famId = pc.famId 
ORDER BY pc.parCount 

內聯視圖(括號之間)是頂篷:它您的分組和計數。請注意,您並不需要按表ccFamily來按家庭分組,因爲表ccChild已攜帶家庭信息。如果您不需要姓氏(即ID是否足夠),那麼您可以單獨使用內聯視圖,並在那裏使用ORDER BY count(*)。外部查詢只將姓名與結果關聯起來。

此外,MySQL提供了一個非標準機制,通過該機制您可以將外部查詢與內聯視圖相結合,但在這種情況下,它對清晰度和簡潔性沒有多大幫助。我提供的查詢應該被任何SQL實現接受,並且首先學習這種語法和方法對您有利。

1

SELECT中,添加如count(ccParts) as count,然後ORDER BY count而不是?不知道你的桌子的結構,所以你可能需要即興創作。

+0

好的,我認爲我需要使用一個組,以便使用相同的ccFamily計算ccParts。? – Josiah

+0

您將需要顯示一些示例數據。是的,我認爲「GROUP BY」是必要的。 –

+1

你可能想看看這個:http://stackoverflow.com/questions/2283305/mysql-order-by-count –

相關問題