如何使用2列按最高值对结果进行排序?

时间:2013-10-04 09:05:16

标签: mysql sql

我有很多网站用户,我想选择所有网站并按访客数量对其进行排序。用户可以通过两种方式指定访客数量。他们可以手动输入它作为一个字符串,存储在下面的查询中的fb.visitor中。

第二种方式是用户在他们的网站上安装Javascript跟踪代码,然后在表tracking_visits中添加条目,总访问次数为count(tv.id)。

我希望能够以两种方式对此结果进行排序。

1)我希望使用两列在顶部和底部获得最高结果。结果示例应为:

  • 99'947(COUNT(tv.id))
  • 75'412(COUNT(tv.id))
  • 40'000(fb.visitors)
  • 37'482(COUNT(tv.id))
  • 30'000(fb.visitors)

2)第二种排序我希望能够将所有COUNT(tv.id)放在首位,最高位,然后获得fb.visitors,其中第一位是最高位。例如:

  • 99'947(COUNT(tv.id))
  • 75'412(COUNT(tv.id))
  • 37'482(COUNT(tv.id))
  • 40'000(fb.visitors)
  • 30'000(fb.visitors)

我当前的查询如下所示:

SELECT cs.userid, fb.visitors, COUNT( tv.id ) 
FROM campaigns_signups cs
INNER JOIN fe_blogs fb ON cs.userid = fb.userid
INNER JOIN tracking_visits tv ON tv.blogid = cs.userid
WHERE tv.visitdate
BETWEEN  "2013-09-04"
AND  "2013-10-04"
AND cs.campaignid =  "97"
AND cs.status <  "4"
GROUP BY tv.blogid
ORDER BY COUNT( tv.id ) , fb.visitors DESC

请注意,查询中的日期和整数只是示例。

此查询的问题在于它仅选择在tracking_visits中包含条目的结果。我想选择一个结果,我在博客中找到访问者数量的博客,他们在fb.visitors中有访问者数量。

3 个答案:

答案 0 :(得分:1)

首先,您可以使用ORDER BY GREATEST(COUNT(tv.id), fb.visitors) DESCDocumentation on GREATEST.对于您的第二个,您需要使用UNIONDocumentation on UNION.

如果您的第一个任务是希望每个网站产生两行(一个用于两个值中的最大值而另一个用于最少),您可以使用UNION再次实现此目的。

答案 1 :(得分:0)

您正在寻找greatest

select greatest(ifnull(fb.visitors,0),count(tv_id)) from.... order by 1

select greatest(ifnull(fb.visitors,0),count(tv_id)) from.... 
order by 
case when greatest(ifnull(fb.visitors,0),count(tv_id))=fb.bisitors then 2 else 1 end, greatest(ifnull(fb.visitors,0),count(tv_id))

按价值来源的第二个按订单排序,然后按值大小

答案 2 :(得分:0)

对于第一个选择COUNT(tv.id)的选项,我可以通过以下查询来完成此任务:

SELECT *, tv.tracked_visits
FROM campaigns_signups cs
INNER JOIN fe_blogs fb ON cs.userid = fb.userid

LEFT JOIN (    
SELECT blogid, COUNT( id ) AS  "tracked_visits"
FROM tracking_visits
WHERE visitdate
BETWEEN  "2013-09-04"
AND  "2013-10-04"                                               
GROUP BY blogid
) AS tv ON tv.blogid = cs.userid
WHERE cs.campaignid =  :campaignid
AND cs.status <  :status
ORDER BY tv.tracked_visits DESC , fb.visitors DESC