Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何检索表中特定ID的列的最频繁值_Sql_Sqlite - Fatal编程技术网

Sql 如何检索表中特定ID的列的最频繁值

Sql 如何检索表中特定ID的列的最频繁值,sql,sqlite,Sql,Sqlite,我试图从SQLite 3数据库表中获取每个特定ID(即公司ID)的最频繁值。我试过使用groupby和orderby以及COUNT()函数 SELECT company_id, max(car) FROM car_orders GROUP by company_id ORDER by max(car) 对于特定的公司id(9),我预计“奥迪”会出现,但情况并非如此,因为其“大众”(这是错误的)在SQLite的最新版本中,您可以使用窗口功能: SELECT cc.* FROM (SELECT

我试图从SQLite 3数据库表中获取每个特定ID(即公司ID)的最频繁值。我试过使用
groupby
orderby
以及
COUNT()
函数

SELECT company_id, max(car) 
FROM car_orders 
GROUP by company_id
ORDER by max(car)

对于特定的公司id(9),我预计“奥迪”会出现,但情况并非如此,因为其“大众”(这是错误的)

在SQLite的最新版本中,您可以使用窗口功能:

SELECT cc.*
FROM (SELECT company_id, car, COUNT(*) as cnt,
             ROW_NUMBER() OVER (PARTITION BY company_id ORDER BY COUNT(*) DESC) as seqnum
      FROM car_orders
      GROUP by company_id, car
     ) cc
WHERE seqnum = 1;
在早期版本中,它稍微复杂一些:

WITH cc as (
      SELECT company_id, car, COUNT(*) as cnt
      FROM car_orders
      GROUP by company_id, car
     )
SELECT cc.*
FROM cc
WHERE cc.cnt = (SELECT MAX(cc2.cnt)
                FROM cc cc2
                WHERE cc2.company_id = cc.company_id
               );

在较新版本的SQLite中,可以使用窗口函数:

SELECT cc.*
FROM (SELECT company_id, car, COUNT(*) as cnt,
             ROW_NUMBER() OVER (PARTITION BY company_id ORDER BY COUNT(*) DESC) as seqnum
      FROM car_orders
      GROUP by company_id, car
     ) cc
WHERE seqnum = 1;
在早期版本中,它稍微复杂一些:

WITH cc as (
      SELECT company_id, car, COUNT(*) as cnt
      FROM car_orders
      GROUP by company_id, car
     )
SELECT cc.*
FROM cc
WHERE cc.cnt = (SELECT MAX(cc2.cnt)
                FROM cc cc2
                WHERE cc2.company_id = cc.company_id
               );

类似于您的尝试,考虑加入两个聚集体,计算每辆车和公司的代码>计数>代码>和每个公司的同一计数器<代码> max >代码>。下面介绍了SQLite版本3.8.3中引入的用法,于发布


类似于您的尝试,考虑加入两个聚集体,计算每辆车和公司的代码>计数>代码>和每个公司的同一计数器<代码> max >代码>。下面介绍了SQLite版本3.8.3中引入的用法,于发布


样本数据和预期结果将有所帮助。你的问题令人困惑,因为你提到了
id
,但在查询中却有
company\u id
。对此我非常抱歉。它应该是公司ID,而不是ID。采样数据和期望的结果会有所帮助。你的问题令人困惑,因为你提到了
id
,但在查询中却有
company\u id
。对此我非常抱歉。应该是公司ID而不是ID谢谢你。那真的很酷。现在它实际上给了我正确的结果。再次非常感谢。我刚刚意识到我需要继续练习我的SQL技能,以迎头赶上!非常感谢你。那真的很酷。现在它实际上给了我正确的结果。再次非常感谢。我刚刚意识到我需要继续练习我的SQL技能,以迎头赶上!现在开始工作了。但还是非常感谢你的解决方案。现在我面临一个问题,我必须解决一个sql子查询语句,因为代码不能在Python上运行。我收到“OperationalError,near SELECT”-error如果没有完整的Python代码块,我无法确定该错误是如何产生的。如果要传递整个SQL语句,包括
游标内。execute()
它应该可以工作。检查
sqlite3.sqlite\u版本
(假设您
导入sqlite3
),查看版本是否高于3.8.3。这支持CTE。它现在正在工作。但还是非常感谢你的解决方案。现在我面临一个问题,我必须解决一个sql子查询语句,因为代码不能在Python上运行。我收到“OperationalError,near SELECT”-error如果没有完整的Python代码块,我无法确定该错误是如何产生的。如果要传递整个SQL语句,包括
游标内。execute()
它应该可以工作。检查
sqlite3.sqlite\u版本
(假设您
导入sqlite3
),查看版本是否高于3.8.3。这支持CTE。