私は別の日に発生する複数のイベントに関連するデータの数を取得しようとしているところに問題があります。イベントのSQLクエリを構築するのが難しい
私は飛行機の群れに従っているとしましょう。それぞれの飛行機は、特定の空港に拠点を置いている間、世界中の多くの飛行機を1日に見つけることができます。私は一日一回のスポッター毎の行と、スポーターのIDの列、日付、その日のスポットの数(彼はいつも彼ですか?)、個々の航空会社の数飛行機が所属していた航空会社の数、航空会社の数はいくつでしたか。だから、私はこのような結果を持っているしたいと思います。だから、
+-----------+------------+---------+----------+-----------+
| | | Planes | | Airline |
| SpotterID | Date | spotted | Airlines | Countries |
+-----------+------------+---------+----------+-----------+
| 1234 | 2017-04-15 | 28 | 11 | 4 |
+-----------+------------+---------+----------+-----------+
| 1234 | 2017-04-16 | 65 | 19 | 7 |
+-----------+------------+---------+----------+-----------+
| 5678 | 2017-04-22 | 39 | 14 | 6 |
+-----------+------------+---------+----------+-----------+
| 6677 | 2017-04-28 | 74 | 29 | 9 |
+-----------+------------+---------+----------+-----------+
、(MySQLの5.7.17を)私のテストテーブルです(私はインデックスのカップルを忘れている場合があります)、以下のスケッチとして。
平面スポッティングイベントテーブルが定義されているとおり
CREATE TABLE `SpottingEvents` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`SpotterID` int(11) NOT NULL,
`SpotDateTime` datetime NOT NULL,
`PlaneID` int(11) NOT NULL,
`Notes` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `indx_SpotterID_PlaneID_DateTime` (`SpotterID`,`PlaneID`,`SpotDateTime`),
KEY `indx_SpotterID_DateTime` (`SpotterID`,`SpotDateTime`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
プレーンテーブルが次のように定義される。
CREATE TABLE `Planes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`PlaneID` int(11) NOT NULL,
`PlaneTypeID` int(11) NOT NULL,
`AirlineID` int(11) NOT NULL,
`Notes` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `indx_PlaneID_AirlineID` (`PlaneID`,`AirlineID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8
航空会社テーブルは次のように定義される。
CREATE TABLE `Airlines` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`AirlineID` int(11) NOT NULL,
`AirlineName` varchar(100) NOT NULL,
`CountryID` int(11) NOT NULL,
`Notes` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `indx_AirlineID` (`AirlineID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8
と国の表は次のように定義されます:
CREATE TABLE `Countries` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`CountryID` int(11) NOT NULL,
`CountryName` varchar(100) NOT NULL,
`Notes` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `indx_CountryID` (`CountryID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8
私の問題は、最後の2つの列で、航空会社と国がカウントされます。
エラーUnknown column 'sev.planeID' in 'where clause'
につながるが、私は何の専門家だから、私は意図した結果が届かない
select distinct sev.SpotDateTime, sev.SpotterID, count(*) as planes_count,
(select count(*) from (select distinct cnt.CountryID
from Countries as cnt
inner join Airlines as aln on al.CountryID = cnt.CountryID
inner join Planes as pl on pl.AirlineID = aln.AirlineID
where pl.PlaneID = sev.PlaneID) as t1) as countries_count
from SpottingEvents as sev
# where sev.UserID = 1234
group by SpotDateTime
order by SpotDateTime
:私は、次のようなこれを行うには、いくつかの方法を、試してみました。では、どのようにして目的の結果を達成できますか?
試した質問を共有できますか? –
ほぼですが、https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple -sql-query – Strawberry
私の質問を編集して、エラーの原因となるサンプルクエリを表示しました... –