Mysql 要排序的SQL查询

Mysql 要排序的SQL查询,mysql,sql,postgresql,sqlalchemy,Mysql,Sql,Postgresql,Sqlalchemy,我有餐桌用品和餐桌用品。每次客户查看产品时,都会在表中为该产品添加一个条目。我想从products表中检索所有产品的列表,并按照查看次数的描述顺序对产品列表进行排序。注意,如果一个产品甚至没有被查看过一次,那么Seed表中就没有条目,该产品应该放在列表的顶部,然后是被查看过一次、两次的产品,依此类推 SELECT products.product_id ,products.product_name , anon_1.seen_count FROM products LEFT OUTER JOI

我有餐桌用品和餐桌用品。每次客户查看产品时,都会在表中为该产品添加一个条目。我想从products表中检索所有产品的列表,并按照查看次数的描述顺序对产品列表进行排序。注意,如果一个产品甚至没有被查看过一次,那么Seed表中就没有条目,该产品应该放在列表的顶部,然后是被查看过一次、两次的产品,依此类推

SELECT products.product_id ,products.product_name , anon_1.seen_count
FROM products 
LEFT OUTER JOIN (
     SELECT seen.product_id , count(*) AS seen_count
     FROM seen 
     GROUP BY seen.product_id
     ) AS anon_1 ON anon_1.product_id = products.product_id  
ORDER BY anon_1.seen_count ASC;
我上面的查询将尚未查看的产品放在底部。我该如何解决这个问题? 我试过下降和上升。降序将查看最少的放在底部,升序将未查看的放在底部

由anon_1.seen_count DESC订购; 它将它们从最大值排序到最小值

你应该使用

 ORDER BY anon_1.seen_count ASC;
从最小到最大排序

由anon_1.seen_count DESC订购; 它将它们从最大值排序到最小值

你应该使用

 ORDER BY anon_1.seen_count ASC;
从最小到最大排序。

试试这个

SELECT products.product_id ,products.product_name , CASE WHEN anon_1.seen_count IS NULL THEN 0 ELSE anon_1.seen_count END AS count
FROM products 
LEFT OUTER JOIN (
     SELECT seen.product_id , count(*) AS seen_count
     FROM seen 
     GROUP BY seen.product_id
     ) AS anon_1 ON anon_1.product_id = products.product_id  
ORDER BY count DESC;
试试这个

SELECT products.product_id ,products.product_name , CASE WHEN anon_1.seen_count IS NULL THEN 0 ELSE anon_1.seen_count END AS count
FROM products 
LEFT OUTER JOIN (
     SELECT seen.product_id , count(*) AS seen_count
     FROM seen 
     GROUP BY seen.product_id
     ) AS anon_1 ON anon_1.product_id = products.product_id  
ORDER BY count DESC;

<> > <代码>左外连接< /代码>,您应该考虑<未被查看的<代码>产品的<强> null < /强>值。所以你应该用这个:

SELECT products.product_id ,products.product_name, 
    COALESCE(anon_1.seen_count, 0) seen_count
FROM products 
LEFT OUTER JOIN (
     SELECT seen.product_id , count(*) AS seen_count
     FROM seen 
     GROUP BY seen.product_id
     ) AS anon_1 ON anon_1.product_id = products.product_id  
ORDER BY seen_count ASC;

<> > <代码>左外连接< /代码>,您应该考虑<未被查看的<代码>产品的<强> null < /强>值。所以你应该用这个:

SELECT products.product_id ,products.product_name, 
    COALESCE(anon_1.seen_count, 0) seen_count
FROM products 
LEFT OUTER JOIN (
     SELECT seen.product_id , count(*) AS seen_count
     FROM seen 
     GROUP BY seen.product_id
     ) AS anon_1 ON anon_1.product_id = products.product_id  
ORDER BY seen_count ASC;

在Mysql和SqlServer中,null值是最小值。但对于Oracle,null值是最大值。 所以您可能会使用MySql或SqlServer,对吗? 当前结果如下所示,我们需要将最后一个放在顶部,该值为空。

为了做到这一点,我添加了一个额外的列来解决它。这符合你的需要吗?希望能对你有所帮助


在Mysql和SqlServer中,null值是最小值。但对于Oracle,null值是最大值。 所以您可能会使用MySql或SqlServer,对吗? 当前结果如下所示,我们需要将最后一个放在顶部,该值为空。

为了做到这一点,我添加了一个额外的列来解决它。这符合你的需要吗?希望能对你有所帮助


对不起,实际上我已经尝试了降序和升序。降序将被查看最少的放在底部,升序将没有被查看的放在底部对不起,实际上我已经尝试了降序和升序。降序将查看次数最少的产品放在底部,升序将未查看的产品放在底部您不能拥有“按查看次数顺序排列的产品列表”和“该产品应放在列表顶部,然后是已查看一次、两次的产品,依此类推”同时,
。。。ORDER BY anon_1.seen_count NULLS FIRST
MySQL(可能)或Postgresql?您不能有“按查看次数顺序排列的产品列表”和“该产品应放在列表的顶部,然后是已查看一次、两次等的产品”
。。。ORDER BY anon_1.seen_首先计算空值
MySQL(可能)或Postgresql?嗯。。。这将导致看不见的产品由于计数说明而位于底部,即,它将从最大值变为最小值。如果您希望在顶部看到不可见的产品,即从最小值到最大值,请使用
按计数排序ASC
.Hmmm。。。这将导致看不见的产品由于计数说明而位于底部,即,它将从最大值变为最小值。如果您希望将看不到的产品放在顶部,即从最小值到最大值,请使用
按计数排序ASC