【问题标题】:How to show rows with duplicate values first in SQL without grouping如何在不分组的情况下首先在 SQL 中显示具有重复值的行
【发布时间】:2022-02-01 18:52:35
【问题描述】:

我有一张这样的桌子 我想获取所有产品,但我想先显示具有相同 PID 的产品(不分组)

样本表

pid product
1   Red
3   Green
2   Blue
4   Violet
3   Magenta
1   Black

预期结果

pid product
1   Red
1   Black
3   Green
3   Magenta
2   Blue
4   Violet

我试过这个 ORDER BY pid ASC 它部分解决了问题,但结果看起来像这样

pid product
1   Red
1   Black
2   Blue (comes in between)
3   Green
3   Magenta
4   Violet

我希望所有具有多个 pid 的产品首先从上到下排序。

【问题讨论】:

  • 这里的大多数人希望样本表数据和预期结果为格式化文本,而不是图像。
  • 还向我们展示您当前的查询尝试。
  • 尤其是这个ORDER BY pid 应该完全符合您的要求。感觉您的数据有问题,或者不清楚您在问什么。样本数据和期望的结果会大有帮助。
  • 我希望这个问题现在更清楚了,谢谢 :) @JNevill

标签: mysql sql


【解决方案1】:

从评论中我认为您的 MySQL 版本不支持 windows 功能,因此您可以使用:

SELECT
  t.pid,
  t.product,
            ( SELECT COUNT('pid') 
              FROM test_tbl ct 
              WHERE ct.pid = t.pid
            ) as counter
FROM
  test_tbl t
  order by counter desc,pid asc ;

结果:

pid   product   counter
1      Red        2
1      Black      2
3      Green      2
3      Magenta    2
2      Blue       1
4      Violet     1

Demo

【讨论】:

    【解决方案2】:
    WITH cte AS (
        SELECT *, COUNT(*) OVER (PARTITION BY pid) cnt
        FROM datatable
    )
    SELECT * FROM cte ORDER BY cnt DESC
    

    【讨论】:

    • 表示无法识别的语句类型。 (靠近位置 0 的“WITH”)我猜不支持'WITH'
    • @SiddyHacks 可能你的MySQL 版本早于 8+
    猜你喜欢
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多