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