SQL查询,一对多,每个匹配项的计数

问题描述

我正在使用sql中的自定义数据库wordpressPHP)上编写自定义查询

我有两个表:

| table.carMake  |    | table.carmodels                 |
|----------------|    |---------------------------------|
| id | make      |    | ID | makeId| modelname| price   |    
|----|-----------|    |----|-------|----------|---------|
| 1  | toyota    |    | 1  | 1     | A        | low     |
| 2  | mazda     |    | 2  | 3     | B        | med     |
| 3  | tesla     |    | 3  | 3     | C        | high    |
                      | 4  | 2     | D        | med     |
                      | 5  | 2     | E        | med     |
                      | 6  | 2     | F        | low     |

我想进行查询,该查询将返回如下数组:

$modelprices = 
[
   make: toyota,low: 1,medium: 0,high: 0,],[
   make: mazda,medium: 2,[
   make: tesla,low: 0,medium: 1,high: 1,]

我一直在搜寻,但是我的sql知识非常有限。谢谢!

解决方法

希望这会对您有所帮助,我已经使用DB Fiddle准备了SQL查询。在这里,我使用CASE时要加上制造商和价格明智的数量。

SELECT CM.make,SUM(CASE CMS.price WHEN 'LOW' THEN 1 ELSE 0 END) AS LOW,SUM(CASE CMS.price WHEN 'HIGH' THEN 1 ELSE 0 END) AS HIGH,SUM(CASE CMS.price WHEN 'MED' THEN 1 ELSE 0 END) AS MED
FROM
carMake AS CM 
INNER JOIN carmodels AS CMS ON CMS.makeId = CM.id
GROUP BY CM.make;

DB Fiddle链接:https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=dfb7344abd06a6a7130e1f4eef293476。 这包括创建表和查询。

,

此sql查询应返回3列:

  1. 命名(例如:Toyota)
  2. 价格(例如:低)
  3. 组合的“计数”,如果存在,则为“ em” (例如:低价丰田的数量,在这种情况下为1)
from table.carMake cmk join table.carmodels cmd on (cmk.id = cmd.makeId)
group by cmk.make,cmd.price;

我还没有测试过,所以请告诉我它是否不起作用,我会予以纠正。

祝你好运!:)

,

尝试以下操作:

选择'make:'+ c.make,

当cm.price ='低'

然后“低:” +计数(厘米价格),否则“低:” +“ 0”结束,

当cm.price ='medium'

然后“中:” +计数(厘米价格)

否则'medium:'+'0'结束,

cm.price ='high'的情况

然后是“高:” +计数(厘米价格)

否则'high:'+'0'结束

来自table.carMake c

内部连接table.carmodels cms.cms = cms.makeid上的cms