3

在此处输入图像描述

那是我桌子的照片。

我必须在“Tegund”是最常见值的所有汽车中选择“Fastanumer”(在这个例子中是丰田)

这是我试过的代码

SELECT Fastanumer FROM  `Bill` 
WHERE Tegund =  
(SELECT MAX(y.cnt) FROM (SELECT COUNT(Tegund) AS cnt FROM Bill ) AS y)

我不得不非常努力地弄清楚,最终却因为 MAX 只会变成一个数字这一事实而自责。(而且由于 Tegund 不是数字列表......)

这甚至可能吗?我怎样才能做到这一点?

4

4 回答 4

4

我想它应该这样工作:

SELECT Fastanumer 
FROM  `Bill` 
WHERE Tegund = (
    SELECT Tegund 
    FROM (
        SELECT Tegund,COUNT(*) FROM Bill GROUP BY Tegund ORDER BY COUNT(*) DESC LIMIT 1
    ) t1
)

甚至像这样:

SELECT Fastanumer 
FROM  `Bill` 
WHERE Tegund = (
    SELECT Tegund FROM Bill GROUP BY Tegund ORDER BY COUNT(*) DESC LIMIT 1
)
于 2013-03-12T20:34:49.423 回答
1

这是我的解决方案:

SELECT Bill.*
FROM Bill
WHERE Tegund IN (
  SELECT Tegund
  FROM Bill
  GROUP BY Tegund
  HAVING COUNT(*) = (
    SELECT MAX(cnt) FROM (
      SELECT COUNT(*) cnt
      FROM Bill
      GROUP BY Tegund
    ) s
  )
)

比其他的稍微复杂一些,但是如果多个Tegund共享相同数量的行,此查询将显示所有最常见的 Tegunds。

在此处此处查看小提琴。

于 2013-03-12T21:32:15.900 回答
0

您首先要做的是找出Tegund在您的表格中出现最多的那个。这就是子查询正在做的事情。然后您将选择与Fastanumer该匹配的Tegund

SELECT DISTINCT Fastanumer 
FROM 'BILL'
WHERE Tegund = (
    SELECT TOPT 1 Tegund, 
                  COUNT(*) as Count
    FROM `BILL`
    GROUP BY Tegund
    ORDER BY Count DESC)
于 2013-03-12T20:37:42.920 回答
0

取决于数据库(和相关的 SQL)。尝试

select fastanumber from bill
    inner join
(select count(*) as cnt, tegund from Bill group by tegund) grpby
    on bill.tegund = grpby.tegund
    and grpby.cnt = (select max(cnt) from (select count(*) as cnt, tegund from Bill group by tegund))
于 2013-03-12T20:41:20.797 回答