Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Select 按行排序_Select_Count_Sql Order By - Fatal编程技术网

Select 按行排序

Select 按行排序,select,count,sql-order-by,Select,Count,Sql Order By,好的,我有一个我正在尝试建立的查询。。我有两个表,表1有一堆常规记录,通常有一个唯一的ID(自动递增),表2有一些记录,其中包括表1中的一些ID。我试图按表1中具有相同ID的最高记录进行订购。。以下是我得到的: SELECT * FROM table1 WHERE table1.status = 1 AND (SELECT COUNT(*) FROM table2 WHERE table2.tbl1_id = table1.id) ORDER BY table1.id DESC 谢谢:)

好的,我有一个我正在尝试建立的查询。。我有两个表,表1有一堆常规记录,通常有一个唯一的ID(自动递增),表2有一些记录,其中包括表1中的一些ID。我试图按表1中具有相同ID的最高记录进行订购。。以下是我得到的:

SELECT * FROM table1 
WHERE table1.status = 1 
AND (SELECT COUNT(*) FROM table2 WHERE table2.tbl1_id = table1.id) 
ORDER BY table1.id DESC
谢谢:)

试试这个:

SELECT a.*, b.cnt
  FROM table1 a LEFT JOIN
    (
        SELECT tbl1_id, COUNT(*) cnt
            FROM table2
        GROUP BY tbl1_id
    ) b
 ON a.id = b.tbl1_id  
WHERE table1.status = 1 
ORDER BY cnt DESC

应该做。。。你换了吗?(即添加额外的列)如果您向
选择
添加列,您需要将它们添加到
分组中,或者使用Cybernate的答案中的方法。两个表上都有数千条记录lol,我已经尝试了您和Cybermates,它没有返回正确的记录..也许你当时没有足够清楚地解释你的要求。mine和Cybernate答案中的查询都将获得每个
表1.id
(包括计数为零的位置)的
表2
中匹配记录数的计数,并按该
计数进行排序。你不是这个意思吗?如果您想排除计数为零的连接,您可以使用
内部连接
OK,明白了:)您的成功:)感谢Martin和Cybermate!如果表2中没有id对应的记录,您是否仍希望在结果中显示表1中的记录?如果是,是否应显示计数为0的记录?
SELECT a.*, b.cnt
  FROM table1 a LEFT JOIN
    (
        SELECT tbl1_id, COUNT(*) cnt
            FROM table2
        GROUP BY tbl1_id
    ) b
 ON a.id = b.tbl1_id  
WHERE table1.status = 1 
ORDER BY cnt DESC