2015-04-25 114 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 –

相关问题