Py学习  »  DATABASE

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

Rayhan Kabir • 3 年前 • 1337 次点击  

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

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
 
1337 次点击  
文章 [ 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上运行的解决方案,请使用 标签