社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

MySQL选择不同的值时工作不正常

Rayhan Kabir • 3 年前 • 1307 次点击  

我试图使用这个查询从我的工资表中检索不同的值

SELECT DISTINCT gross,sl_month,sl_year 
FROM wp_attn_emp_salary where `emp_id` = 22 order by gross DESC

但它也会返回重复值。请检查图像。

Query Result

我的预期结果是这样的

Array
(
[0] => stdClass Object
    (
        [gross] => 9595
        [sl_month] => 2
        [sl_year] => 2021
    )

[1] => stdClass Object
    (
        [gross] => 9226
        [sl_month] => 1
        [sl_year] => 2020
    )

[2] => stdClass Object
    (
        [gross] => 8875
        [sl_month] => 2
        [sl_year] => 2019
    
    )

[3] => stdClass Object
    (
        [gross] => 8420
        [sl_month] => 1
        [sl_year] => 2019
    )

[4] => stdClass Object
    (
        [gross] => 8405
        [sl_month] => 12
        [sl_year] => 2018
    )

[5] => stdClass Object
    (
        [gross] => 6464
        [sl_month] => 1
        [sl_year] => 2018
    )

)

我也需要按降序排列的sl_月和sl_年。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131349
 
1307 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Bill Karwin
Reply   •   1 楼
Bill Karwin    3 年前

您误解了DISTINCT在SQL中的工作方式。如果整行(即所有列)与结果中的任何其他行不同,则返回一行。这两行互不相同:

总的 sl_月 sl_年
9595 1. 二千零二十一
9595 2. 二千零二十一

从您描述的预期结果来看,您似乎想要 查询

SELECT gross, sl_month, sl_year
FROM (
 SELECT gross, sl_month, sl_year,
  ROW_NUMBER() OVER (PARTITION BY gross ORDER BY sl_year, sl_month) AS rownum
 FROM wp_attn_emp_salary 
 WHERE emp_id = 22
) AS t
WHERE t.rownum = 1
ORDER BY sl_month DESC, sl_year DESC;

注: Window functions 需要MYSQL 8.0,它于2018年发布,所以你现在应该已经在使用它了。如果您需要在早期版本的MySQL上运行的解决方案,请使用 标签