其他查询的SQL排序结果

时间:2015-07-21 21:20:41

标签: mysql sql

我有两张桌子:

`users`
`id` INT(11)
`name` VARCHAR(30)

`items`
`id` INT(11)
`name` VARCHAR(30)
`owner` VARCHAR(30)

以下是我的问题:我尝试按users表中的唯一项目数量对items表进行排序。

获取唯一数量的项目:

SELECT * FROM `items` WHERE `owner`='".$ownername."' GROUP BY `name`

运行此查询会为我提供一些$ownername的唯一项目数。

我尝试做的是按users表格中的唯一项目数量排序items表格,我不知道我会怎样做那样做。

2 个答案:

答案 0 :(得分:2)

您可以按计数加入,分组和排序:

SELECT u.name
FROM users u
JOIN items i
WHERE u.owner='".$ownername."' 
GROUP BY u.name
ORDER BY COUNT(i.id) DESC

或者您可以按子选择的结果排序,该子选择计算每个用户的项目:

SELECT u.name
FROM users u
WHERE u.owner='".$ownername."' 
ORDER BY
  (SELECT COUNT(*) FROM items i WHERE i.owner = u.name) DESC

后者如果你想显示值,你也可以稍微改写一下:

SELECT u.name,
       (SELECT COUNT(*) FROM items i WHERE i.owner = u.name) as item_count
FROM users u
WHERE u.owner='".$ownername."' 
ORDER BY
  item_count DESC

答案 1 :(得分:0)

我使用了import dj_database_url DATABASES = {} DATABASES['default'] = dj_database_url.config() DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2' ,因此没有项目的用户也会出现。

left join